Java中常見資料結構:List與Map
阿新 • • 發佈:2019-07-11
1:集合 Collection(單列集合) List(有序,可重複) ArrayList 底層資料結構是陣列,查詢快,增刪慢 執行緒不安全,效率高 Vector 底層資料結構是陣列,查詢快,增刪慢 執行緒安全,效率低 LinkedList 底層資料結構是連結串列,查詢慢,增刪快 執行緒不安全,效率高 Set(無序,唯一) HashSet 底層資料結構是雜湊表(實際上是一個HashMap例項)。 雜湊表依賴兩個方法:hashCode()和equals() 執行順序: 首先判斷hashCode()值是否相同 是:繼續執行equals(),看其返回值 是true:說明元素重複,不新增 是false:就直接新增到集合 否:就直接新增到集合 最終: 自動生成hashCode()和equals()即可
LinkedHashSet 底層資料結構由連結串列和雜湊表組成。 由連結串列保證元素有序。 由雜湊表保證元素唯一。 TreeSet 底層資料結構是紅黑樹。(是一種自平衡的二叉樹) 如何保證元素唯一性呢? 根據比較的返回值是否是0來決定 如何保證元素的排序呢? 兩種方式 自然排序(元素具備比較性) 讓元素所屬的類實現Comparable介面 比較器排序(集合具備比較性) 讓集合接收一個Comparator的實現類物件 Map(雙列集合) A:Map集合的資料結構僅僅針對鍵有效,與值無關。 B:儲存的是鍵值對形式的元素,鍵唯一,值可重複。 HashMap HashMap是Java 1.2引進的基於雜湊表Map介面的一個非同步實現(HashMap繼承於AbstractMap,AbstractMap完成了Map介面)。 此實現提供所有可選的對映操作,並允許使用null值和null鍵。此類不保證對映的順序,特別是它不保證該順序恆久不變。 底層資料結構是[陣列+連結串列]組成的。執行緒不安全,效率高 雜湊表依賴兩個方法:hashCode()和equals() 執行順序: 首先判斷hashCode()值是否相同 是:繼續執行equals(),看其返回值 是true:說明元素重複,不新增 是false:就直接新增到集合 否:就直接新增到集合 最終: 自動生成hashCode()和equals()即可 LinkedHashMap 底層資料結構由雙向迴圈連結串列和雜湊表組成。 由連結串列保證元素有序。 由雜湊表保證元素唯一。 Hashtable Hashtable是基於陳舊的Dictionary類,完成了Map介面。執行緒安全,效率低 雜湊表依賴兩個方法:hashCode()和equals() 執行順序: 首先判斷hashCode()值是否相同 是:繼續執行equals(),看其返回值 是true:說明元素重複,不新增 是false:就直接新增到集合 否:就直接新增到集合 最終: 自動生成hashCode()和equals()即可 TreeMap 底層資料結構是紅黑樹。(是一種自平衡的二叉樹) 如何保證元素唯一性呢? 根據比較的返回值是否是0來決定 如何保證元素的排序呢? 兩種方式 自然排序(元素具備比較性) 讓元素所屬的類實現Comparable介面 比較器排序(集合具備比較性) 讓集合接收一個Comparator的實現類物件
2.關於集合選取原則
是否是鍵值物件形式: 是:Map 鍵是否需要排序: 是:TreeMap 否:HashMap 不知道,就使用HashMap。 否:Collection 元素是否唯一: 是:Set 元素是否需要排序: 是:TreeSet 否:HashSet 不知道,就使用HashSet 否:List 要安全嗎: 是:Vector 否:ArrayList或者LinkedList 增刪多:LinkedList 查詢多:ArrayList 不知道,就使用ArrayList 不知道,就使用ArrayList
3:集合的常見方法及遍歷方式 Collection: add() remove() contains() iterator() size()
遍歷:
增強for
迭代器
|--List
get()
遍歷:
普通for
|--Set
Map:
put()
remove()
containskey(),containsValue()
keySet()
get()
value()
entrySet()
size()
遍歷:
根據鍵找值
根據鍵值對物件分別