更新時間
第一版:20200703
問題
1. 整理全部的數據類型
2. 每個數據類型的底層數據結構、是數組、鏈表、棧、散列表、隊列、紅黑樹、二叉樹、B樹
3. 對比每種數據類型的區別
4. 每種數據類型的使用場景
java數據結構主要接口和類
- 枚舉(Enum)
- 位集合(BitSet)
- 向量(Vector)
- 棧(Stack)
- 字典(Dictionary)
- 哈希表(HashTable)
- 屬性(Properties)
集合(其中包括接口和實現類)
- 看後綴:Set,List,Map
- 看前綴:前綴代表數據結構的具體實現方式
- Hash、Array:哈希數組實現的數據結構
- Linked:鏈表實現的數據結構
- Tree,Sorted:代表着內部使用紅黑樹排序,需要實現Comparable方式
-
Collection
- List:(隊列)有插入順序,可重複元素
- AbstractList
- ArrayList(哈希數組) 適合隨機讀取,不適合在集合中間插入刪除,時間複雜度在O(1),非線程同步的數組
- AbstractSequentialList
- LinkedList(雙向鏈表) 適合插入頭尾插入刪除,不適合隨機讀取,時間複雜度在O(n)
- Vector(數組)線程同步的數組
- Stack(數組)LIFO 後勁先出
- AbstractList
- Set:(集合)無插入順序,不可重複數據,允許包含null元素,最多一個null
- AbstractSet
- HashSet(哈希數組)
- LinkedHashSet(鏈表)
- TreeSet(紅黑樹)
- HashSet(哈希數組)
- SortSet(紅黑樹)有序集合
- TreeSet(紅黑樹)
- AbstractSet
- Queue
- List:(隊列)有插入順序,可重複元素
-
Map:(Hash表) Key-Value 鍵值對
- AbstractMap
- HashMap(哈希數組) key可以爲null HashMap是一個個Entry(key-value鍵值對)存儲在一個哈希數組上,Entity是Has和Map的內部類,哈希數組使用過程中會遇到哈希碰撞的問題,出現不用value計算得到同一個key,常用解決方案有:拉鍊法(jdk)、再哈希,開放地址法。再jdk1.8中引入紅黑樹來存儲value值。使時間複雜度保證在O(logN)以內
- LinkedHashMap(雙向鏈表)
- HashTable(哈希數組)key不能爲null
- TreeMap(紅黑樹)
- IdentityHashMap
- WeakHashMap
- HashMap(哈希數組) key可以爲null HashMap是一個個Entry(key-value鍵值對)存儲在一個哈希數組上,Entity是Has和Map的內部類,哈希數組使用過程中會遇到哈希碰撞的問題,出現不用value計算得到同一個key,常用解決方案有:拉鍊法(jdk)、再哈希,開放地址法。再jdk1.8中引入紅黑樹來存儲value值。使時間複雜度保證在O(logN)以內
- SortedMap
- TreeMap(紅黑樹)
- AbstractMap
常用集合類型區別
對比項 | Vector | ArrayList | LinkedList |
---|---|---|---|
同步問題 | 線程同步數組 | 線程不同步 | 線程不同步 |
底層數據結構 | 哈希數組 | 哈希數組 | 鏈表 |
對比項 | HashSet | TreeSet |
---|---|---|
底層數據結構 | 哈希數組 | 紅黑樹 |
對比項 | HashMap | HashTable |
---|---|---|
同步問題 | 非同步,使用fail-fast迭代器, | 同步,線程安全的,多個線程共享一個HashTable,使用enumeration迭代器 |
底層數據結構 | 哈希數組 | 紅黑樹 |
兩個集合工具類對比Collections和Arrays
內部提供了封裝器實現(Wrapper Implementations),數據結構算法和數組操作
Collections
- Collections還有一個重要功能就是“封裝器”(Wrapper),它提供了一些方法可以把一個集合轉換成一個特殊的集合,如下:
- unmodifiableXXX:轉換成只讀集合,這裏XXX代表六種基本集合接口:Collection、List、Map、Set、SortedMap和SortedSet。如果你對只讀集合進行插入刪除操作,將會拋出UnsupportedOperationException異常。
- synchronizedXXX:轉換成同步集合。
singleton:創建一個僅有一個元素的集合,這裏singleton生成的是單元素Set, - singletonList和singletonMap分別生成單元素的List和Map。
- 空集:由Collections的靜態屬性EMPTY_SET、EMPTY_LIST和EMPTY_MAP表示。