java集合框架總結(五)

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)
相關文章
相關標籤/搜索