集合
集合框架
目標
- 使用集合存儲數據
- 遍歷集合,取數據
- 掌握每種集合的特性
- List
- 有序的集合
- 允許存儲重複的元素
- 有索引,可以使用for循環遍歷
- Vector
- ArrayList
- LinkedList
- Set
-
不允許存儲重複元素
-
沒有索引(不能使用for循環遍歷)
- TreeSet 無序
- HashSet
- LinkedHashSet 有序
Collection 接口
定義的是所有單列集合中共性的方法
所有單列集合都可以使用共性的方法
沒有帶索引的方法
學習頂層:學習頂層接口/抽象類中共性的方法
使用底層
共性的方法:
java.util.Collection 接口
- add
- clear
- remove
- contains
- isEmpty
- size
- toArray
迭代器 Iterator
Java.util.Iterator
-
boolean hasNext()
-
E next()
Iterator 迭代器是一個接口,需要使用實現類對象
Iterator Iterator 返回在此Iterator 的迭代器 -
使用步驟
- 使用集合中的Iterator()獲取迭代器的實現類對象,使用Iterator接口接受(多態)
- 使用Iterator接口中的方法hasNext判斷還有沒有下一個元素
- 使用Iterator接口中的方法next取出集合中的下一個元素
- 增強for循環 for each
遍歷集合和數組
格式:
for (集合/數組 的數據類型 變量名: 集合名/數組名){}
List
-
List接口的特點
- 有序的集合,存儲元素和取出元素的順序是一致的
- 有索引,包含了一些帶索引的方法
- 允許重複存儲元素
-
List接口帶索引的方法(特有)
- add
- get
- remove
- set
注意:操作索引一定要防止索引越界異常
-
ArrayList:底層是數組,查詢快,增刪慢
-
LinkedList:有大量操作收尾元素的方法。底層是鏈表,查詢快,增刪慢
注意:使用 LinkedList 特有方法,不能使用多態 -
Vector:可以實現可增長的對下對象數組 (單線程)
Set
有哈希表支持,不保證順序,不同步
哈希表 = 數組 + 鏈表
Set集合在調用add方法的時候會調用元素的hashCode方法和equals方法判斷元素是否重複
哈希表 = 數組 + 紅黑樹(提高查詢速度)
如果鏈表的長度超過了8位,那麼就會把鏈表轉換爲紅黑樹
-
哈希表特點:
- 查詢速度快
-
特點java.util.Set
- 不允許存儲重複元素:
- 沒有帶索引的方法,也不能使用普通的for循環遍歷,使用迭代器或者增強for
-
HashSet 實現了 Set接口
- 不允許存儲重複元素
- 沒有帶索引的方法,也不能使用普通的for循環遍歷
- 是一個無序的集合,存儲元素和取出元素順序有可能不一樣
- 底層是一個哈希表結構(查詢的速度特別快)
使用HashCode 存儲自定義類型元素 必須重寫hashCode 和 equals 方法
-
LinkedHashSet 繼承了 HashSet 集合
- 底層是 哈希表(數組 + 鏈表/紅黑樹) + 鏈表:多了一套鏈表(記錄元素的存儲順序),保證元素有序
-
可變參數
- 可變參數的底層是一個數組,根據傳遞參數個數不同,會創建不同長度的數組,來存儲這些參數的參數個數
-
排序 sort
- 使用前提: 被排序集合裏面存儲的元素,必須實現 Comparable ,重寫接口中得方法 compareTo 定義排序的規則
Comparator 和 Comparable 區別
Comparable:自己(this)和別人(參數)比較,自己需要實現Comparable接口,重寫比較規則
Comparator:相當於找一個第三方的裁判來比較兩個人、重寫比較規則