天天看點

java中list和map的底層實作原理

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