Java集合類型——持續更新

更新時間

第一版:20200703

集合

問題

   1. 整理全部的數據類型
   2. 每個數據類型的底層數據結構、是數組、鏈表、棧、散列表、隊列、紅黑樹、二叉樹、B樹
   3. 對比每種數據類型的區別
   4. 每種數據類型的使用場景

java數據結構主要接口和類

  1. 枚舉(Enum)
  2. 位集合(BitSet)
  3. 向量(Vector)
  4. 棧(Stack)
  5. 字典(Dictionary)
  6. 哈希表(HashTable)
  7. 屬性(Properties)

集合(其中包括接口和實現類)

  • 看後綴:Set,List,Map
  • 看前綴:前綴代表數據結構的具體實現方式
    • Hash、Array:哈希數組實現的數據結構
    • Linked:鏈表實現的數據結構
    • Tree,Sorted:代表着內部使用紅黑樹排序,需要實現Comparable方式
  • Collection

    • List:(隊列)有插入順序,可重複元素
      • AbstractList
        • ArrayList(哈希數組) 適合隨機讀取,不適合在集合中間插入刪除,時間複雜度在O(1),非線程同步的數組
        • AbstractSequentialList
          • LinkedList(雙向鏈表) 適合插入頭尾插入刪除,不適合隨機讀取,時間複雜度在O(n)
        • Vector(數組)線程同步的數組
          • Stack(數組)LIFO 後勁先出
    • Set:(集合)無插入順序,不可重複數據,允許包含null元素,最多一個null
      • AbstractSet
        • HashSet(哈希數組)
          • LinkedHashSet(鏈表)
        • TreeSet(紅黑樹)
      • SortSet(紅黑樹)有序集合
        • TreeSet(紅黑樹)
    • Queue
  • 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
    • SortedMap
      • TreeMap(紅黑樹)

常用集合類型區別

對比項 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表示。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章