javase集合 溫故而知新
複習javase集合
1、為什麼要有集合?
數組長度需要在初始化時確定大小,數據結構單一、因此集合出現了
2、數組和集合的區別
區別一:數組既可以存儲基本數據類型,又可以存儲引用類型,集合只能存儲引用類型
區別二:數組在初始化的時候就需要確認大小,集合有默認初始大小和擴容機制
區別三:集合類有豐富的封裝方法
UML圖
粗邊框的是常用的的類,虛線邊框是介面

集合的兩大介面
Collection 介面
常用方法:
| 方法名 | 說明 | 返回類型 | 參數 |
|---|---|---|---|
| add | 添加元素到末尾 | boolean | 添加的元素對象 |
| addAll | 合併另一個Collection | boolean | 實現了Collection的集合 |
| contains | 檢查是否包含某個元素 | boolean | 元素對象 |
| containsAll | 檢查是否包含集合 | boolean | 實現了Collection的集合 |
| isEmpty | 集合是否為空 | boolean | 無參 |
| remove | 移除元素 | boolean | 元素對象 |
| removeAll | 移除集合中有另一個集合的元素 | boolean | 實現了Collection的集合 |
| size | 返回集合大小 | int | 無參 |
| toArray | 轉換成數組 | [ ] | 無參 |
遍歷方式:
- 迭代器 Iterator (需要刪除元素時推薦用這個)
- forEach
實現介面:List、Set
List常用方法
| 方法名 | 說明 | 返回類型 | 參數 |
|---|---|---|---|
| add(String item, int index) | 添加元素到指定位置 | void | 索引,元素 |
| addAll(int index, Collection<? extends E> c) | 添加集合到指定位置 | boolean | 索引,集合 |
| get(int index) | 獲取值 | 元素 | 索引 |
| indexOf(Object o) | 判斷List中是否有這個元素,有返回索引,無返回-1 | int | 元素 |
| listIterator() | 返回List迭代器 | ListIterator | 無參 |
| listIterator(int index) | 返回List迭代器,游標移動到參數索引處 | ListIterator | 索引 |
| remove(int index) | 移除List元素 | 元素 | 索引 |
| set(int index, E element) | 替換元素 | 元素 | 索引,元素 |
| subList(int fromIndex, int toIndex) | 分割List | List | 開始索引,結束索引 |
| retainAll(Collection<?> c) | 僅保留包含在指定集合中的此集合中的元素 | boolean | Collection |
| lastIndexOf(Object o) | 返回此列表中指定元素的最後一個發生的索引,如果沒有返回-1 | int | 元素 |
List特有遍歷方式:
- get
- List迭代器
List常用實現類
- ArrayList
特點:查找速度快,刪除添加元素慢,因為底層使用數組,索引位置變化,大於索引的都要往前移一個,執行緒不安全 - LinkedList
特點:查找速度慢,刪除添加元素速度快,因為底層使用鏈表,需要從頭或者從尾開始一個一個查找,複雜度為O(n),刪除添加只需要改變上一個節點的引用即可,執行緒不安全
Set常用方法
| 方法名 | 說明 | 返回類型 | 參數 |
|---|---|---|---|
| retainAll(Collection<?> c) | 僅保留包含在指定集合中的此集合中的元素 | boolean | Collection |
| ... | ... | ... | ... |
Set特點:
無序,存儲元素不可重複,元素必須重寫hashCode和equlas方法
Set常用實現類
-
HashSet
特點:元素完全使用HashMap的key來存儲,執行緒不安全 -
TreeSet
特點:使用紅黑樹為元素排序,更改默認排序有兩種方式- 構造函數中傳入Comparator
- 元素實現Comparable
執行緒不安全
-
LinkedHashSet
特點:HashSet的子類,使用鏈表來存儲插入的順序,value是LinkedHashMap的key。需要遍歷完全部元素的情況下比HashSet效率高。執行緒不安全
Map介面
常用方法:
| 方法名 | 說明 | 返回類型 | 參數 |
|---|---|---|---|
| put | 添加 | void | key,value |
| putAll | 合併另一個Map | void | 實現了Map的集合 |
| containsKey | 是否包含key | boolean | key |
| containsValue | 是否包含這個值 | boolean | value |
| keySet | 返回Map所有的key | Set | 無參 |
| values | 返回Map所有的value | Collection | 無參 |
| entrySet | 返回key value | Entry | 無參 |
| remove | 刪除 | value | key |
| remove | 如果key和value相匹配則刪除 | boolean | key,value |
| size | 返回有多少個元素 | int | 無參 |
| clear | 清除 | void | 無參 |
遍歷方式:
- entrySet (最常用 性能好)
- values
- keySet
- Iterator

