1、Set接口 概述
Set 接口繼承 Collection 接口,並且它不容許集合中存在重複項,每一個具體的 Set 實現類
依賴添加的對象的 equals()方法來檢查獨一性。Set接口沒有引入新方法,因此Set就是一
個Collection,只不過其行爲不一樣。 而後來講Set接口的3種實現.java
二:HashSet概述
- HashSet 是 Set 接口的典型實現,大多數時候使用 Set 集合時都使用這個實現類。
- HashSet 按 Hash 算法來存儲集合中的元素,所以具備很好的存取和查找性能。
- HashSet 具備如下特色:不能保證元素的排列順序,HashSet 不是線程安全的,集合元素可使 null
- HashSet的對象必須實現hashCode方法,javaAPI大多數類實現了hashCode方法。
- 當向 HashSet 集合中存入一個元素時,HashSet 會調用該對象的 hashCode() 方法來獲得該對象的 hashCode 值,而後根據 hashCode 值決定該對象在 HashSet 中的存儲位置。
- 若是兩個元素的 equals() 方法返回 true,但它們的 hashCode() 返回值不相等,hashSet 將會把它們存儲在不一樣的位置,但依然能夠添加成功。
- HashSet 集合判斷兩個元素相等的標準:兩個對象經過 equals() 方法比較相等,而且兩個對象的 hashCode() 方法返回值也相等。若是兩個對象經過 equals() 方法返回 true,這兩個對象的 hashCode 值也應該相同.
- 重寫 hashCode() 方法的基本原則:
-在程序運行時,同一個對象屢次調用 hashCode() 方法應該返回相同的值
-當兩個對象的 equals() 方法比較返回 true 時,這兩個對象的 hashCode() 方法的返回值也應相等
-對象中用做 equals() 方法比較的 Field,都應該用來計算 hashCode 值
三:LinkedHashSet
- LinkedHashSet 是 HashSet 的子類,支持規則集內元素的排序,在HashSet中元素是沒有順序的,而在LinkedHashSet中,能夠按元素插入集合的順序進行提取
- LinkedHashSet 集合根據元素的 hashCode 值來決定元素的存儲位置,但它同時使用鏈表維護元素的次序,這使得元素看起來是以插入順序保存的。
- LinkedHashSet 性能插入性能略低於 HashSet,但在迭代訪問 Set 裏的所有元素時有很好的性能。
- LinkedHashSet 不容許集合元素重複。
四:TreeSet
- TreeSet 是 SortedSet 接口的實現類,TreeSet 能夠確保集合元素處於排序狀態。
- TreeSet 支持兩種排序方法:天然排序和定製排序。默認狀況下,TreeSet 採用天然排序。
- 天然排序:由於只有相同類的兩個實例纔會比較大小,因此向 TreeSet 中添加的應該是同一個類的對象當須要把一個對象放入 TreeSet 中,重寫該對象對應的 equals() 方法時,應保證該方法與 compareTo(Object obj) 方法有一致的結果:若是兩個對象經過 equals() 方法比較返回 true,則經過 compareTo(Object obj) 方法比較應返回 0
- TreeSet 會調用集合元素的 compareTo(Object obj) 方法來比較元素之間的大小關係,而後將集合元素按升序排列若是試圖把一個對象添加到 TreeSet 時,則該對象的類必須實現 Comparable 接口。
- 實現 Comparable 的類必須實現 compareTo(Object obj) 方法,兩個對象即經過 compareTo(Object obj) 方法的返回值來比較大小。
- Comparable 的典型實現:BigDecimal、BigInteger 以及全部的數值型對應的包裝類:按它們對應的數值大小進行比較
- Character:按字符的 UNICODE 值來進行比較
- Boolean:true 對應的包裝類實例大於 false 對應的包裝類實例
- String:按字符串中字符的 UNICODE 值進行比較
- Date、Time:後邊的時間、日期比前面的時間、日期大
- 定製排序:若是須要實現定製排序,則須要在建立 TreeSet 集合對象時,提供一個 Comparator 接口的實現類對象。由該 Comparator 對象負責集合元素的排序邏輯
- TreeSet保證集中的元素是有序的,有2種方法能夠實現對象之間的可比較性:1,添加到TreeSet的對象實現了Comparable接口;2,給規則集的元素指定一個比較器(Comparator),主要方法:
- Comparator comparator() Object first() Object last() Object lower(Object e) Object higher(Object e) SortedSet subSet(fromElement, toElement) SortedSet headSet(toElement) SortedSet tailSet(fromElement)