21天精通java基礎之Day13集合Set接口

Day13:集合(Set)


Set:存儲的元素是無序的,不可重複的

1.無序性:無序性!=隨機性。真正的無序性,指的是元素在底層存儲的位置是無序的。

2:不可重複性。當向Set中添加進相同的元素的時候,後面的不能添加進去。

說明:要求添加進Set中的元素所在的類,一定要重寫equals()和hashCode()方法,進而保證Set中元素的不可重複性。set中存儲元素使用哈希算法,當向Set中添加對象時,首先調用此對象所在類的hashCode()方法,計算此對象的哈希值,此哈希值決定了此對象在Set中的存儲位置。若此位置之前沒有對象存儲,則這個對象直接存儲到此位置。若此位置已有對象存儲,再通過equals()方法比較這兩個對象是否相同。如果相同,後一個對象就不能再添加進來。

返回false,都存儲。要求:hashCode()要與equals()方法一致。


LinkedHashSet:

使用鏈表維護了一個添加進集合中的順序。導致遍歷LinkedHashSet集合元素時,是按照添加進去的順序遍歷的。插入性能略低於HashSet,但在迭代訪問Set裏的全部元素是又很好的性能。


TreeSet:

1:向TreeSet中添加的元素必須是同一個類的。

2:可以按照添加進集合中的元素的指定的順序遍歷。像String,包裝類默認按照從小到達的順序遍歷。

3:當向TreeSet中添加自定義類的對象時,有兩種排序方法,①自然排序②定製排序

4:自然排序:要求自定義類實現java.lang.Comparable接口並重寫其compareTo(Object obj)方法,在此方法中,指明按照自定義類的哪個屬性進行排序。

5:向TreeSet中添加元素時,首先按照compareTo()進行比較,一旦返回0,雖然僅是兩個對象的屬性值相同,但是程序會認爲這兩個對象是相同的,進而後一個對象就不能添加進來。

6.定製排序:①創建一個實現了Comparator接口的類對象。②將此對象作爲形參傳遞給TreeSet的構造器中。③向TreeSet中添加Comparator接口中的compare方法中涉及的類的對象。

注意:compare()與hashCode()以及equals()三者保持一致!

compareTo就是比較兩個值,如果前者大於後者,返回1,等於返回0,小於返回-1




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章