1. 程式人生 > >Java中常見資料結構:list與map -底層如何實現

Java中常見資料結構:list與map -底層如何實現

複製程式碼
1:集合
  2     Collection(單列集合)
  3         List(有序,可重複)
  4             ArrayList
  5                 底層資料結構是陣列,查詢快,增刪慢
  6                 執行緒不安全,效率高
  7             Vector
  8                 底層資料結構是陣列,查詢快,增刪慢
  9                 執行緒安全,效率低
 10             LinkedList
 11                 底層資料結構是連結串列,查詢慢,增刪快
 12                 執行緒不安全,效率高
 13         Set(無序,唯一)
 14             HashSet
 15                 底層資料結構是雜湊表。
 16                 雜湊表依賴兩個方法:hashCode()和equals()
 17                 執行順序:
 18                     首先判斷hashCode()值是否相同
 19                         是:繼續執行equals(),看其返回值
 20                             是true:說明元素重複,不新增
 21                             是false:就直接新增到集合
 22                         否:就直接新增到集合
 23                 最終:
 24                     自動生成hashCode()和equals()即可
 25                     
 26                 LinkedHashSet
 27                     底層資料結構由連結串列和雜湊表組成。
 28                     由連結串列保證元素有序。
 29                     由雜湊表保證元素唯一。
 30             TreeSet
 31                 底層資料結構是紅黑樹。(是一種自平衡的二叉樹)
 32                 如何保證元素唯一性呢?
 33                     根據比較的返回值是否是0來決定
 34                 如何保證元素的排序呢?
 35                     兩種方式
 36                         自然排序(元素具備比較性)
 37                             讓元素所屬的類實現Comparable介面
 38                         比較器排序(集合具備比較性)
 39                             讓集合接收一個Comparator的實現類物件
 40     Map(雙列集合)
 41         A:Map集合的資料結構僅僅針對鍵有效,與值無關。
 42         B:儲存的是鍵值對形式的元素,鍵唯一,值可重複。
 43         
 44         HashMap
 45             底層資料結構是雜湊表。執行緒不安全,效率高
 46                 雜湊表依賴兩個方法:hashCode()和equals()
 47                 執行順序:
 48                     首先判斷hashCode()值是否相同
 49                         是:繼續執行equals(),看其返回值
 50                             是true:說明元素重複,不新增
 51                             是false:就直接新增到集合
 52                         否:就直接新增到集合
 53                 最終:
 54                     自動生成hashCode()和equals()即可
 55             LinkedHashMap
 56                 底層資料結構由連結串列和雜湊表組成。
 57                     由連結串列保證元素有序。
 58                     由雜湊表保證元素唯一。
 59         Hashtable
 60             底層資料結構是雜湊表。執行緒安全,效率低
 61                 雜湊表依賴兩個方法:hashCode()和equals()
 62                 執行順序:
 63                     首先判斷hashCode()值是否相同
 64                         是:繼續執行equals(),看其返回值
 65                             是true:說明元素重複,不新增
 66                             是false:就直接新增到集合
 67                         否:就直接新增到集合
 68                 最終:
 69                     自動生成hashCode()和equals()即可
 70         TreeMap
 71             底層資料結構是紅黑樹。(是一種自平衡的二叉樹)
 72                 如何保證元素唯一性呢?
 73                     根據比較的返回值是否是0來決定
 74                 如何保證元素的排序呢?
 75                     兩種方式
 76                         自然排序(元素具備比較性)
 77                             讓元素所屬的類實現Comparable介面
 78                         比較器排序(集合具備比較性)
 79                             讓集合接收一個Comparator的實現類物件
 80     
 81 2.關於集合選取原則
 82     
 83     是否是鍵值物件形式:
 84         是:Map
 85             鍵是否需要排序:
 86                 是:TreeMap
 87                 否:HashMap
 88             不知道,就使用HashMap。
 89             
 90         否:Collection
 91             元素是否唯一:
 92                 是:Set
 93                     元素是否需要排序:
 94                         是:TreeSet
 95                         否:HashSet
 96                     不知道,就使用HashSet
 97                     
 98                 否:List
 99                     要安全嗎:
100                         是:Vector
101                         否:ArrayList或者LinkedList
102                             增刪多:LinkedList
103                             查詢多:ArrayList
104                         不知道,就使用ArrayList
105             不知道,就使用ArrayList
106             
107 3:集合的常見方法及遍歷方式
108     Collection:
109         add()
110         remove()
111         contains()
112         iterator()
113         size()
114         
115         遍歷:
116             增強for
117             迭代器
118             
119         |--List
120             get()
121             
122             遍歷:
123                 普通for
124         |--Set
125     
126     Map:
127         put()
128         remove()
129         containskey(),containsValue()
130         keySet()
131         get()
132         value()
133         entrySet()
134         size()
135         
136         遍歷:
137             根據鍵找值
138             根據鍵值對物件分別找鍵和值
139             
複製程式碼 複製程式碼

1:集合(自己補齊)

Collection(單列集合)

List(有序,可重複)

ArrayList底層資料結構是陣列,查詢快,增刪慢執行緒不安全,效率高Vector底層資料結構是陣列,查詢快,增刪慢執行緒安全,效率低LinkedList底層資料結構是連結串列,查詢慢,增刪快執行緒不安全,效率高Set(無序,唯一)

HashSet底層資料結構是雜湊表。雜湊表依賴兩個方法:hashCode()和equals()執行順序:首先判斷hashCode()值是否相同是:繼續執行equals(),看其返回值是true:說明元素重複,不新增是false:就直接新增到集合否:就直接新增到集合最終:自動生成hashCode()和equals()即可LinkedHashSet底層資料結構由連結串列和雜湊表組成。由連結串列保證元素有序。由雜湊表保證元素唯一。

TreeSet底層資料結構是紅黑樹。(是一種自平衡的二叉樹)如何保證元素唯一性呢?

       根據比較的返回值是否是0來決定如何保證元素的排序呢?兩種方式自然排序(元素具備比較性)讓元素所屬的類實現Comparable介面比較器排序(集合具備比較性)讓集合接收一個Comparator的實現類物件Map(雙列集合)A:Map集合的資料結構僅僅針對鍵有效,與值無關。B:儲存的是鍵值對形式的元素,鍵唯一,值可重複。

HashMap底層資料結構是雜湊表。執行緒不安全,效率高雜湊表依賴兩個方法:

  hashCode()和equals()執行順序:首先判斷hashCode()值是否相同是:繼續執行equals(),看其返回值是true:說明元素重複,不新增是false:就直接新增到集合否:就直接新增到集合最終:自動生成hashCode()和equals()即可LinkedHashMap底層資料結構由連結串列和雜湊表組成。由連結串列保證元素有序。由雜湊表保證元素唯一。

Hashtable底層資料結構是雜湊表。執行緒安全,效率低雜湊表依賴兩個方法:

  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不知道,就使用ArrayList3:集合的常見方法及遍歷方式Collection:add()remove()contains()iterator()size()遍歷:增強for迭代器|--Listget()遍歷:普通for|--SetMap:put()remove()containskey(),containsValue()keySet()get()value()entrySet()size()遍歷:根據鍵找值根據鍵值對物件分別找鍵和值作業:我講解過的任意一個集合,我要求你儲存什麼,你就能夠儲存什麼。並且,還要能夠遍歷出來。

4:ArrayList,LinkedList,HashSet,HashMap(掌握)儲存字串和自定義物件資料並遍歷5:集合的巢狀遍歷(理解)

注:

1.其中的Arralist  程式碼中大量的用了System.arraycopy () 方法 進行陣列進行復制

System.arraycopy(elementData, index+1, elementData, index,
numMoved);