List、Set、Map容器
Java中的集合分為單列集合Collection和雙列集合Map。
先通過這張圖看看Collection和Map的各自體系。Set和Map
首先看單列集合Collection中的List及Set的各自特征。
List(有序,可重複)
ArrayList
底層資料結構是數組,查詢快,增删慢
線程不安全,效率高
Vector
底層資料結構是數組,查詢快,增删慢
線程安全,效率低
LinkedList
底層資料結構是連結清單,查詢慢,增删快
線程不安全,效率高
Set(無序,唯一)
HashSet
底層資料結構是哈希表。
LinkedHashSet
底層資料結構由連結清單和哈希表組成。
由連結清單保證元素有序。
由哈希表保證元素唯一。
TreeSet
底層資料結構是紅黑樹。(是一種自平衡的二叉樹)
根據比較的傳回值是否是0來決定保證元素唯一性
兩種排序方式
自然排序(元素具備比較性)
讓元素所屬的類實作Comparable接口
比較器排序(集合具備比較性)
讓集合接收一個Comparator的實作類對象
接下來是雙列集合Map的特征
Map(雙列集合)
注:Map集合的資料結構僅僅針對鍵有效,與值無關。存儲的是鍵值對形式的元素,鍵唯一,值可重複。
HashMap
底層資料結構是哈希表。線程不安全,效率高
哈希表依賴兩個方法:hashCode()和equals()
執行順序:
首先判斷hashCode()值是否相同
是:繼續執行equals(),看其傳回值
是true:說明元素重複,不添加
是false:就直接添加到集合
否:就直接添加到集合
最終:
自動生成hashCode()和equals()即可
LinkedHashMap
底層資料結構由連結清單和哈希表組成。
由連結清單保證元素有序。
由哈希表保證元素唯一。
Hashtable
底層資料結構是哈希表。線程安全,效率低
哈希表依賴兩個方法:hashCode()和equals()
執行順序:
首先判斷hashCode()值是否相同
是:繼續執行equals(),看其傳回值
是true:說明元素重複,不添加
是false:就直接添加到集合
否:就直接添加到集合
最終:
自動生成hashCode()和equals()即可
TreeMap
底層資料結構是紅黑樹。(是一種自平衡的二叉樹)
根據比較的傳回值是否是0來決定保證元素唯一性
兩種排序方式
自然排序(元素具備比較性)
讓元素所屬的類實作Comparable接口
比較器排序(集合具備比較性)
讓集合接收一個Comparator的實作類對象
那麼到底什麼時候需要用什麼樣的集合呢?
畫一張圖總結下
無論是單列或者雙列集合,死記每種方法的書寫沒有太大必要。常用的方法無非是增删改查這幾種。API文檔裡面應有盡有。掌握熟悉每種集合的特性才能用起來得心應手。