Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一種,迭代器。算法
|--HashSet:底層數據結構是哈希表,線程是不一樣步的。無序,高效;數據結構
HashSet集合保證元素惟一性:經過元素的hashCode方法,和equals方法完成的。函數
當元素的hashCode值相同時,才繼續判斷元素的equals是否爲true。線程
若是爲true,那麼視爲相同元素,不存。若是爲false,那麼存儲。對象
若是hashCode值不一樣,那麼不判斷equals,從而提升對象比較的速度。排序
|--LinkedHashSet:有序,hashset的子類。接口
|--TreeSet:對Set集合中的元素的進行指定順序的排序。不一樣步。TreeSet底層的數據結構就是二叉樹。同步
哈希表的原理:hash
1,對對象元素中的關鍵字(對象中的特有數據),進行哈希算法的運算,並得出一個具體的算法值,這個值 稱爲哈希值。io
2,哈希值就是這個元素的位置。
3,若是哈希值出現衝突,再次判斷這個關鍵字對應的對象是否相同。若是對象相同,就不存儲,由於元素重複。若是對象不一樣,就存儲,在原來對象的哈希值基礎 +1順延。
4,存儲哈希值的結構,咱們稱爲哈希表。
5,既然哈希表是根據哈希值存儲的,爲了提升效率,最好保證對象的關鍵字是惟一的。
這樣能夠儘可能少的判斷關鍵字對應的對象是否相同,提升了哈希表的操做效率。
對於ArrayList集合,判斷元素是否存在,或者刪元素底層依據都是equals方法。
對於HashSet集合,判斷元素是否存在,或者刪除元素,底層依據的是hashCode方法和equals方法。
TreeSet:
用於對Set集合進行元素的指定順序排序,排序須要依據元素自身具有的比較性。
若是元素不具有比較性,在運行時會發生ClassCastException異常。
因此須要元素實現Comparable接口,強制讓元素具有比較性,複寫compareTo方法。
依據compareTo方法的返回值,肯定元素在TreeSet數據結構中的位置。
TreeSet方法保證元素惟一性的方式:就是參考比較方法的結果是否爲0,若是return 0,視爲兩個對象重複,不存。
注意:在進行比較時,若是判斷元素不惟一,好比,同姓名,同年齡,才視爲同一我的。
在判斷時,須要分主要條件和次要條件,當主要條件相同時,再判斷次要條件,按照次要條件排序。
TreeSet集合排序有兩種方式,Comparable和Comparator區別:
1:讓元素自身具有比較性,須要元素對象實現Comparable接口,覆蓋compareTo方法。
2:讓集合自身具有比較性,須要定義一個實現了Comparator接口的比較器,並覆蓋compare方法,並將該類對象做爲實際參數傳遞給TreeSet集合的構造函數。
第二種方式較爲靈活。