HashSet,TreeSet和LinkedHashSet的區別

Set接口 
Set不容許包含相同的元素,若是試圖把兩個相同元素加入同一個集合中,add方法返回false。 
Set判斷兩個對象相同不是使用==運算符,而是根據equals方法。也就是說,只要兩個對象用equals方法比較返回true,Set就不 會接受這兩個對象。 
HashSet 
HashSet有如下特色 
 不能保證元素的排列順序,順序有可能發生變化 
 不是同步的 
 集合元素能夠是null,但只能放入一個null 
當向HashSet結合中存入一個元素時,HashSet會調用該對象的hashCode()方法來獲得該對象的hashCode值,而後根據 hashCode值來決定該對象在HashSet中存儲位置。 
簡單的說,HashSet集合判斷兩個元素相等的標準是兩個對象經過equals方法比較相等,而且兩個對象的hashCode()方法返回值相 等 
注意,若是要把一個對象放入HashSet中,重寫該對象對應類的equals方法,也應該重寫其hashCode()方法。其規則是若是兩個對 象經過equals方法比較返回true時,其hashCode也應該相同。另外,對象中用做equals比較標準的屬性,都應該用來計算 hashCode的值。 
LinkedHashSet 
LinkedHashSet集合一樣是根據元素的hashCode值來決定元素的存儲位置,可是它同時使用鏈表維護元素的次序。這樣使得元素看起 來像是以插入順序保存的,也就是說,當遍歷該集合時候,LinkedHashSet將會以元素的添加順序訪問集合的元素。 
LinkedHashSet在迭代訪問Set中的所有元素時,性能比HashSet好,可是插入時性能稍微遜色於HashSet。 
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)方法性能

相關文章
相關標籤/搜索