一、集合的基本概念總結
Collection(單列集合)
- List(有序,可重複)
- ArrayList
- 底層數據結構爲數組,查詢快,增刪慢,線程不安全,效率高
- Vector
- 底層數據結構爲數組,查詢快,增刪慢,線程安全,效率低
- LinkedList
- 底層數據結構爲鏈表,查詢慢,增刪快,線程不安全,效率高
- Set(無序,唯一)
- HashSet
- 底層數據結構爲哈希表
- 哈希表依賴兩個方法:hashCode()和equals()
- 執行順序
- 首先判斷hashCode()的值是否相同
- 是:執行equals()方法,看其返回值
- 是true:說明元素重複,不添加
- 是false:直接添加到集合
- 否:直接添加
- 最終:自動生成equals()和hashCode()方法在目標類當中
- LinkedHashSet
- 底層數據結構由鏈表和哈希表組成
- 鏈表保證元素有序
- 哈希表保證元素唯一
- TreeSet
- 底層數據結構是紅黑樹(紅黑樹是一種自平衡的二叉樹)
- 如何保證村的元素唯一性呢?
- 根據比較的返回值是否爲零來判斷
- 如何保證元素的排序呢?
- 自然排序(元素具備比較性):讓元素所屬的類實現Comparable接口
- 比較器排序(集合具備比較性):讓集合接收一個Comparator的實現類對象
Map(雙列集合)
- Map集合的數據結構只針對鍵有效,與值無關;
- 存儲的是鍵值對的元素,鍵唯一,值可重複
- HashMap
- 底層數據結構爲哈希表,線程不安全,效率高
- 哈希表依賴兩個方法:hashCode()和equals()
- 執行順序
- 首先判斷hashCode()的值是否相同
- 是:執行equals()方法,看其返回值
- 是true:說明元素重複,不添加
- 是false:直接添加到集合
- 否:直接添加
- 最終:自動生成equals()和hashCode()方法在目標類當中
- LinkedHashMap
- 底層數據結構由鏈表和哈希表組成
- 鏈表保證元素有序
- 哈希表保證元素唯一
- Hashtable
- 底層數據結構爲哈希表,線程安全,效率低
- 哈希表依賴兩個方法:hashCode()和equals()
- 執行順序
- 首先判斷hashCode()的值是否相同
- 是:執行equals()方法,看其返回值
- 是true:說明元素重複,不添加
- 是false:直接添加到集合
- 否:直接添加
- 最終:自動生成equals()和hashCode()方法在目標類當中
- TreeMap
- 底層數據結構是紅黑樹(紅黑樹是一種自平衡的二叉樹)
- 如何保證村的元素唯一性呢?
- 根據比較的返回值是否爲零來判斷
- 如何保證元素的排序呢?
- 自然排序(元素具備比較性):讓元素所屬的類實現Comparable接口
- 比較器排序(集合具備比較性):讓集合接收一個Comparator的實現類對象
二、到底使用那種集合
- 看需求
- 是否是鍵值對對象形式:
- 是:Map
- 鍵是否需要排序
- 是:TreeMap
- 否:HashMap
- 不知道使用 HashMap
- 否:Collection
- 元素是否唯一
- 是 Set
- 元素是否需要排序:
- 是:TreeSet
- 否:HashSet
- 不知道使用HashSet
- 否 List
- 要安全嗎:
- 要:Vector
- 不要:ArrayList或者LinkedList
- 增刪多:LinkedList
- 查詢多:ArrayList
- 不知道,使用ArrayList
- 不知道,使用ArrayList
三、集合常見常見方法及遍歷方式
- Collection:
- add()
- remove()
- contains()
- iterator()
- size()
- 遍歷
- 增強for
- 迭代器
- List
- get()
- 遍歷:
- 普通for
- Set
- Map
- put()
- remove()
- containskey(),containsValue()
- keySet()
- get()
- value()
- entrySet()
- size()
- 遍歷:
- 根據鍵找值
- 根據鍵值對對象分別找鍵和值
四.尾巴
1.如有錯誤歡迎大家指出,我會及時更正,有什麼不懂也可以留言提問,互相交流嗎。
2.也許大家覺得這沒什麼,但是我會認真對待,把它當成我的筆記、心得、這樣才能提升自己。