1. 程式人生 > >Java集合概述 Set | List基本介紹

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適用於大量增刪操作,查詢效率較低