jdk常用非併發容器整理

根據數據結構總結jdk常見的非併發容器,小結。

數據結構

基於數組
ArrayList
ArrayDeque(循環數組)
  • 只需要雙端隊列效果時使用,比linkedList還要快
  • 不提供索引方法
  • 判斷元素存不存在需遍歷 效率低
EnumMap
  • 特殊的 專門提供給鍵爲enum使用的map
  • 數組的索引和枚舉的ordinal對應,get方法直接是先把枚舉的ordinal獲取到然後從數組裏面獲取值。
基於鏈表

應用場景: 要求有序,兩端訪問情況多

LinkedList
  • 可作隊列(雙端隊列)
  • 可作List
基於hash(數組+鏈表(紅黑樹))

應用場景:不需要重複元素,隨機訪問

hashMap
  • 在併發操作中擴容操作容易形成環,引起死循環,應當使用併發容器ConcurrentHashMap
hashSet
基於排序二叉樹

應用場景:需要有序

  • TreeMap
  • TreeSet
基於鏈表+hash

應用場景:需要實現訪問排序

  • LinkedHashMap
  • LinkedHashSet
基於位向量
EnumSet
  • 原理: 使用long 64位 保存枚舉集合,二進制中的一個位表示一個元素的兩種狀態,0表示不包含該枚舉值,1表示包含該枚舉值。
  • 兩個實現RegularEnumSet(一個long保存數據),JumboEnumSet(long數組保存)
BitSet
  • 可以方便地對指定位置的位進行操作,與其他位向量進行位運算。
  • 原理:內部使用long數組存儲位向量,構造函數傳入需要構造的位向量的位數。
基於堆(完全二叉樹)
概念
  • 要求最後一層不一定是滿的,但要求最後一層幾點從左到右是連續的,不能間隔
  • 種類 分爲最大堆(根節點的值最大)與最小堆(根節點的值最小)
  • 存儲結構 數組,因爲堆是完全二叉樹,所以每個節點的位置可以對應數組的下標
PriorityQueue
  • 優先級隊列
  • 單端隊列
  • 應用:實時求中間值,實時求最大或最小值,優先級任務隊列。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章