Set介面中的方法和Collection中方法一致的。Set介面取出方式只有一種,迭代器。 |--HashSet:底層數據結構是哈希表,線程是不同步的。無序,高效; HashSet集合保證元素唯一性:通過元素的hashCode方法,和equals方法完成的。 當元素的hashCode值相同時,才繼續 ...
Set介面中的方法和Collection中方法一致的。Set介面取出方式只有一種,迭代器。 |--HashSet:底層數據結構是哈希表,線程是不同步的。無序,高效; HashSet集合保證元素唯一性:通過元素的hashCode方法,和equals方法完成的。 當元素的hashCode值相同時,才繼續判斷元素的equals是否為true。 如果為true,那麼視為相同元素,不存。如果為false,那麼存儲。 如果hashCode值不同,那麼不判斷equals,從而提高對象比較的速度。 |--LinkedHashSet:有序,hashset的子類。 |--TreeSet:對Set集合中的元素的進行指定順序的排序。不同步。TreeSet底層的數據結構就是二叉樹。 哈希表的原理: 1,對對象元素中的關鍵字(對象中的特有數據),進行哈希演算法的運算,並得出一個具體的演算法值,這個值 稱為哈希值。 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集合的構造函數。 第二種方式較為靈活。