Java集合概述 Set | List基本介紹
一.概述
集合由兩個類派生而出
Collection : ( Set 、List 、Queue)
- Set:無序、不重複
- List:有序、可重複
- Queue:佇列結構、先進先出
Map: (HashMap Hashtable TreeMap)
- HashMap:key和value允許為null
- Hashtable:key和value不允許為null
- TreeMap:可排序
二.Set介紹
1.HashSet
1.1 HashSet特性
無序,不可重複、非執行緒同步,元素值可以為null
1.2 HashSet判斷重複元素的依據
1.HashSet是根據HashCode決定儲存位置
2.僅當HashCode和equals同時為true時,判斷元素重複
3.equals比較為true,hashCode比較為false,仍可以新增成功,但與Set規則衝突了
4.equals為false,hashCode為true,可以成功,這種更嚴重(HashSet是根據hashCode快速找到地址定位的,如果存在兩個以上相同的hashCode,效能會下降)
1.3 HashSet新增元素重寫equals()和hashCode()的規則
要麼都為true,要麼都為false
1.4 HashSet儲存注意事項
HashSet儲存完元素後,不要輕易改動會影響hashCode和equals方法結果的例項變數,否則可能會導致無法找到之前儲存的物件
2.TreeSet
2.1 Compareble介面
compareTo(Object obj)方法規則
當A.compareTo(B) ,當A < B 返回 -1 ,當A == B 返回 0 ,當A > B返回1
2.2 TreeSet性質
TreeSet新增元素時必須實現Compareble介面,自然排序時按照compareTo的結果升序排序
有序,不可重複,非執行緒同步,元素值不可以為null
2.3 TreeSet判斷重複元素的依據
僅compareTo()返回0時,TreeSet判斷該元素重複
2.4 TreeSet新增元素重寫equals()和compareTo()的規則
當equals()返回true時,compareTo()返回0
2.5.TreeSet注意事項
(1)新增的元素必須實現Comparable介面
(2)因為會呼叫CompareTo介面比較元素,所以最好是隻新增同一種類型的物件,以免發生ClassCastException
(3) 與HashSet一樣新增完以後就不要修改影響CompareTo判斷元素大小的物件屬性,否則會造成無法刪除,找不到修改前的元素等問題(按紅黑樹儲存,修改後破壞了結構)
三.List介紹
1.基本介紹
List分為ArrayList和LinkedList,前者採用線性表的資料結構,後者採用連結串列的資料結構
ArrayList使用get()隨機訪問效率較高,LinkedList使用迭代器訪問效率較高
2.使用場景
1.ArrayList適用於遍歷、查詢比較多的時候效率較高,缺點是增刪效率較慢
2.LinkedList適用於大量增刪操作,查詢效率較低