java常用集合選用指南
阿新 • • 發佈:2017-05-14
lan 應該 查找 排序 可重復 安全 每次 線程安全 100%
java集合在選用的時候應該選那個合適?一張表告訴你該怎麽選java集合
java集合類 |
是否線程安全 |
是否鍵值對 |
排序 |
性能 |
元素是否可重復 |
擴容策略 |
|
List接口 |
arraylist |
否 |
否 |
維持存的時候的順序 |
查詢性能高,增刪元素性能低 |
是 |
1.5倍擴容,元素大於當前容量的100%時進行擴容 |
linkedlist |
否 |
否 |
有順序 |
查詢性能低,增刪元素性能高 |
是 |
||
vector |
是 |
否 |
有順序 |
低 |
是 |
||
Stack |
是 |
否 |
有順序,先進後出 |
低 |
是 |
||
Map接口 |
hashmap |
否 |
是 |
不排序 |
快速插入和查找 |
key不可重復,value可重復 |
2倍擴容,元素大於當前容量的75%時進行擴容 |
hashtable |
是 |
是 |
不排序 |
低 |
key不可重復,value可重復 |
||
treeMap |
否 |
是 |
根據key自動排序 |
快速插入和查找 |
key不可重復,value可重復 |
||
Set接口 |
hashset |
否 |
否 |
不排序 |
快速插入和查找 |
否 |
|
treeset |
否 |
否 |
默認升序排序(按照compare to接口返回值) |
快速插入和查找 |
否 |
使用指南:
1 在集合場景明確的情況下,指定初始化容量,因為不指定容量,初始化容量為10,每次擴容都會對底層數組做一次拷貝,消耗性能;
2 所有集合底層存儲都是數組,數組可以存放基本類型,集合只能存對象
3 Java.lang.reflect.Array工具提供了對數組的操作;Java.util.collection工具提供了集合的操作
4 HashMap可以通過Map m = Collections.synchronizedMap(hashMap)來達到同步的效果
java常用集合選用指南