集合
- 集合體系結構圖
- Collection集合
- 概述
- 常用方法
- 遍歷(迭代器)及代碼演示
- List集合
- 概述(特點)
- 方法
- 概述
- 遍歷(三種遍歷方式——迭代器,普通for,增強for)
- List子集的特點和功能
- Set集合
- 1.特點
- 哈希值
- ①HashSet
- ②LinkedHashSet集合
- ③TreeSet集合
- Map集合
- **概述:**
- 特點:
- 常用方法
- 獲取方法
- 遍歷的兩種方式:
- 總結
- 補充
- 集合框架底層資料結構總結

集合體系結構圖

Collection集合
概述
1.單例集合的頂層介面,它表示一組物件,這些物件也稱為Collection的元素
2.JDK 不提供此介面的任何直接實作,它提供更具體的子介面(如Set和List)實作
常用方法

遍歷(迭代器)及代碼演示


代碼演示:

List集合
概述(特點)
- 有序集合
允許出現重復的元素
集合特點:①存盤順序一致 ②存盤的元素可以重復 ③有索引
方法

概述
遍歷(三種遍歷方式——迭代器,普通for,增強for)

List子集的特點和功能
①ArrayList集合——底層是陣列結構實作,查詢快、增刪慢
②LinkedList集合——底層是鏈表結構實作,查詢慢、增刪快
LinkedList集合的特有功能
Set集合
1.特點
- 元素存取無序
- 沒有索引,只能通過迭代器或者增強FOR來遍歷
- 不能存盤重復元素
哈希值
-
概念:JDK根據物件的地址或者字串或者數字算出來的int型別的數值
-
獲取方法:Object類中的public int hashCode():回傳物件的哈希碼值
-
哈希值的特點:
-
1.同一個物件多次呼叫hashCode()方法回傳的哈希值是相同
-
2.默認情況下,不同物件的哈希值是不同的,而重寫hashCode()方法,可以實作讓不同物件的哈希值相同
代碼演示:

哈希表:
①HashSet
集合特點:
- 1.底層是哈希表結構
- 2.元素存盤無序
- 3.沒有索引
- 4.不能存盤重復元素
HashSet集合保證元素唯一性原始碼分析圖解**

HashSet學生遍歷(重點:重寫hashCode()和equals()方法,用增強FOR遍歷)


②LinkedHashSet集合
特點
-
哈希表和鏈表實作的Set介面,具有可預測的迭代次序
-
存盤有序
-
沒有重復元素
代碼實作

③TreeSet集合
特點
- 元素存盤有序
- 沒有索引
- 不能存盤重復元素
1.自然排序Comparable(代碼演示)


2.比較器排序Comparator的使用(代碼演示)


Map集合
概述:
interface Map<K,V> K:鍵的型別;V:值的型別
代碼演示:

特點:
- 1.鍵值對映射關系
2.一個鍵對應一個值
3.鍵不能重復,值可以重復
4.元素存取無序
常用方法

獲取方法

遍歷的兩種方式:
①鍵去獲取值(代碼演示)

②鍵值去獲取鍵和值(代碼演示)

總結
在學習集合中,需要注意單列集合(Collection)和雙列(Map)集合的區別(區分它們的遍歷方式,分清它們的特點以及代碼的具體運用
補充

如圖所示:圖中,實線邊框的是實作類,折線邊框的是抽象類,而點線邊框的是介面
1、List(有序、可重復)
List里存放的物件是有序的,同時也是可以重復的,List關注的是索引,擁有一系列和索引相關的方法,查詢速度快,因為往list集合里插入或洗掉資料時,會伴隨著后面資料的移動,所有插入洗掉資料速度慢,
2、Set(無序、不能重復)
Set里存放的物件是無序,不能重復的,集合中的物件不按特定的方式排序,只是簡單地把物件加入集合中,
3、Map(鍵值對、鍵唯一、值不唯一)
Map集合中存盤的是鍵值對,鍵不能重復,值可以重復,根據鍵得到值,對map集合遍歷時先得到鍵的set集合,對set集合進行遍歷,得到相應的值,
對比如下:

集合框架底層資料結構總結
Collection
1.List
- Arraylist: Object陣列
- Vector: Object陣列
- LinkedList: 雙向回圈鏈表
2.Set
- HashSet(無序,唯一): 基于 HashMap 實作的,底層采用 HashMap 來保存元素
- LinkedHashSet: LinkedHashSet 繼承與 HashSet,并且其內部是通過 LinkedHashMap
來實作的,有點類似于我們之前說的LinkedHashMap 其內部是基于 Hashmap 實作一樣,不過還是有一點點區別的, - TreeSet(有序,唯一): 紅黑樹(自平衡的排序二叉樹
3.Map
-
HashMap:
JDK1.8之前HashMap由陣列+鏈表組成的,陣列是HashMap的主體,鏈表則是主要為了解決哈希沖突而存在的(“拉鏈法”解決沖突).JDK1.8以后在解決哈希沖突時有了較大的變化,當鏈表長度大于閾值(默認為8)時,將鏈表轉化為紅黑樹,以減少搜索時間 -
LinkedHashMap: LinkedHashMap 繼承自
HashMap,所以它的底層仍然是基于拉鏈式散列結構即由陣列和鏈表或紅黑樹組成,另外,LinkedHashMap
在上面結構的基礎上,增加了一條雙向鏈表,使得上面的結構可以保持鍵值對的插入順序,同時通過對鏈表進行相應的操作,實作了訪問順序相關邏輯,詳細可以查看:《LinkedHashMap 原始碼詳細分析(JDK1.8)》 -
HashTable: 陣列+鏈表組成的,陣列是 HashMap 的主體,鏈表則是主要為了解決哈希沖突而存在的
-
TreeMap: 紅黑樹(自平衡的排序二叉樹)

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/302398.html
標籤:java
