Java中的集合Collection是集合的頂層父接口,Set爲其的子接口之一,而它也是我們經常食用到的集合。
下面就來談談Set集合。
Set集合概述
Set集合中的元素特點是:元素不允許重複,即元素唯一。
Set集合的成員方法
HashSet集合
HashSet是Set的一個實現子類,即此類實現Set接口,它由哈希表(實際上是一個 HashMap 實例)支持。它不保證 set 的迭代順序;特別是它不保證該順序恆久不變,可以理解爲元素的存取順序不一致。HashSet是線程不安全的,此類允許使用 null 元素。
當我們向HashSet中存儲元素的時候,HashSet 會調用該對象的hashCode() 方法來得到該對象的 hashCode 值,然後根據 hashCode 值決定該對象在 HashSet 中的存儲位置。
HashSet 集合判斷兩個元素相等的標準:
兩個對象通過 hashCode() 方法比較相等,並且兩個對象的 equals() 方法返回值也相等。
所以,HashSet中的元素的唯一性是通過元素重寫hashCode()和equals()方法來保證的,如果不重寫則無法保證元素的唯一性。
我們使用HashSet存儲Java提供好的引用類型的對象時,可以不用重寫hashcode()方法和equals()方法,因爲該類 已經重寫了hashcode()方法和equals()方法。
而使用HashSet存儲自定義對象的時候,需要先在該類中重寫hashcode()方法和equals()方法,否則無法保證HashSet中元素的唯一性。
構造方法
成員方法
LinkedHashSet集合
具有可預知迭代順序的 Set 接口的哈希表和鏈接列表實現(鏈表保證有序,哈希表保證元素唯一)。
此實現與 HashSet 的不同之外在於,後者維護着一個運行於所有條目的雙重鏈接列表。此鏈接列表定義了迭代順序,即按照將元素插入到 set 中的順序(插入順序)進行迭代,即元素的存取順序一致。注意,插入順序不受在 set 中重新插入的 元素的影響。
構造方法
成員方法
TreeSet集合
該類是基於 TreeMap 的 NavigableSet 實現。使用元素的自然順序對元素進行排序,或者根據創建 set 時提供的 Comparator 進行排序,具體取決於使用的構造方法。
TreeMap中元素不僅唯一,還可以對元素進行排序。排序有兩種方式:
- 自然順序排序。使用TreeSet集合進行元素的自然排序,那麼對元素有要求,要求該元素必須實現Comparable接口,否則無法進行自然排序。
- 按照比較器的順序進行排序。
元素的唯一性則是由compareTo方法的返回值來確定。如果返回0,表示兩個元素相等,則不重複存儲。
構造方法
成員方法