List
有序可重復
ArrayList
ArrayList數據結構是數組。查詢快,增刪慢。ArrayList是線程不安全的,允許元素為null 。
Vector
線程安全的數組,效率較差,已經過時不用。
LinkedList
LinkedList 數據結構是雙向鏈表,插入刪除比較方便。LinkedList 是線程不安全的,允許元素為null 。
Map
HashMap :
jdk1.8中HashMap底層是哈希表數據結構,數組+鏈表+紅黑樹,HashMap是線程不安全的,允許使用null鍵和null值,
HashMap根據鍵的HashCode值存儲數據,具有很快的訪問速度。
HashMap存入的鍵值對在遍歷時的順序是隨機的。
HashMap不支持並發
HashTable:
線程安全,使用synchronized鎖住全部數據,效率較低。
LinkedHashMap:
LinkedHashMap 是HashMap的一個子類,默認LinkedHashMap遍歷時輸出的順序和put輸入的順序是相同的。
LinkedHashMap有兩種排序方式:插入排序和訪問排序(修改或訪問一個元素后,將該元素移到隊列末尾),默認是插入排序。使用accessOrder來標記使用哪種排序方式,accessOrder==true時,表示使用訪問排序,默認為false;
LinkedHashMap使用了雙向鏈表來保證了順序性。
public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) { super(initialCapacity, loadFactor); this.accessOrder = accessOrder; }
TreeMap:
TreeMap底層是紅黑樹數據結構,線程不安全,可以用於給Map集合中的鍵進行排序
TreeMap遍歷出來的是排序后的鍵值對。
ConcurrentHashMap
ConcurrentHashMap是線程安全的,jdk1.8使用CAS和volatile實現。而jdk1.8以前通過鎖分段技術、可重入鎖實現。
支持並發,可以一邊更新一邊遍歷
Set
HashSet
存放鍵值對,無序不重復。