好程式設計師Java培訓分享treeset和hashset的區別

好程式設計師發表於2020-11-19

  好程式設計師Java 培訓分享 treeset hashset 的區別 首先我們來說一下 HashSet

   HashSet 有以下特點

   不能保證元素的排列順序,順序有可能發生變化

   不是同步的

   集合元素可以是null, 但只能放入一個 null

   當向HashSet 集合中存入一個元素時, HashSet 會呼叫該物件的 hashCode() 方法來得到該物件的 hashCode 值,然後根據 hashCode 值來決定該物件在 HashSet 中儲存位置。

   簡單的說,HashSet 集合判斷兩個元素相等的標準是兩個物件透過 equals 方法比較相等,並且兩個物件的 hashCode() 方法返回值相等

   注意,如果要把一個物件放入HashSet 中,重寫該物件對應類的 equals 方法,也應該重寫其 hashCode() 方法。其規則是如果兩個物件透過 equals 方法比較返回 true 時,其 hashCode 也應該相同。另外,物件中用作 equals 比較標準的屬性,都應該用來計算 hashCode 的值。

   TreeSet

   TreeSet SortedSet 介面的唯一實現類, TreeSet 可以確保集合元素處於排序狀態。 TreeSet 支援兩種排序方式,自然排序和定製排序,其中自然排序為預設的排序方式。向 TreeSet 中加入的應該是同一個類的物件。

   TreeSet 判斷兩個物件不相等的方式是兩個物件透過 equals 方法返回 false ,或者透過 CompareTo 方法比較沒有返回 0

   自然排序

   自然排序使用要排序元素的CompareTo Object obj )方法來比較元素之間大小關係,然後將元素按照升序排列。

   Java 提供了一個 Comparable 介面,該介面裡定義了一個 compareTo(Object obj) 方法,該方法返回一個整數值,實現了該介面的物件就可以比較大小。

   obj1.compareTo(obj2) 方法如果返回 0 ,則說明被比較的兩個物件相等,如果返回一個正數,則表明 obj1 大於 obj2 ,如果是負數,則表明 obj1 小於 obj2

   如果我們將兩個物件的equals 方法總是返回 true ,則這兩個物件的 compareTo 方法返回應該返回 0

   定製排序

   自然排序是根據集合元素的大小,以升序排列,如果要定製排序,應該使用Comparator 介面,實現 int compare(T o1,T o2) 方法。

   最重要:

   1 TreeSet 是二差樹實現的 ,Treeset 中的資料是自動排好序的,不允許放入 null 值。

   2 HashSet 是雜湊表實現的 ,HashSet 中的資料是無序的,可以放入 null ,但只能放入一個 null ,兩者中的值都不能重複,就如資料庫中唯一約束。

   3 HashSet 要求放入的物件必須實現 HashCode() 方法,放入的物件,是以 hashcode 碼作為標識的,而具有相同內容的 String 物件, hashcode 是一樣,所以放入的內容不能重複。但是同一個類的物件可以放入不同的例項。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2735322/,如需轉載,請註明出處,否則將追究法律責任。

相關文章