在前篇博文中(java提高篇(二三)-----HashMap)詳細講解了HashMap的實現(xiàn)過程,對于HashSet而言,它是基于HashMap來實現(xiàn)的,底層采用HashMap來保存元素。所以如果對HashMap比較熟悉,那么HashSet是so easy!!
%20HashSet繼承AbstractSet類,實現(xiàn)Set、Cloneable、Serializable接口。其中AbstractSet提供%20Set%20接口的骨干實現(xiàn),從而最大限度地減少了實現(xiàn)此接口所需的工作。Set接口是一種不包括重復元素的Collection,它維持它自己的內部排序,所以隨機訪問沒有任何意義。
基本屬性
[java] view%20plain copyiterator()方法返回對此%20set%20中元素進行迭代的迭代器。返回元素的順序并不是特定的。底層調用HashMap的keySet返回所有的key,這點反應了HashSet中的所有元素都是保存在HashMap的key中,value則是使用的PRESENT對象,該對象為static%20final。
[java] view%20plain copysize()返回此%20set%20中的元素的數(shù)量(set%20的容量)。底層調用HashMap的size方法,返回HashMap容器的大小。
[java] view%20plain copyisEmpty(),判斷HashSet()集合是否為空,為空返回 true,否則返回false。
[java] view%20plain copycontains(),判斷某個元素是否存在于HashSet()中,存在返回true,否則返回false。更加確切的講應該是要滿足這種關系才能返回true:(o==null%20?%20e==null%20:%20o.equals(e))。底層調用containsKey判斷HashMap的key值是否為空。
[html] view%20plain copyadd()如果此%20set%20中尚未包含指定元素,則添加指定元素。如果此Set沒有包含滿足(e==null%20?%20e2==null%20:%20e.equals(e2))%20的e2時,則將e2添加到Set中,否則不添加且返回false。由于底層使用HashMap的put方法將key%20=%20e,value=PRESENT構建成key-value鍵值對,當此e存在于HashMap的key中,則value將會覆蓋原有value,但是key保持不變,所以如果將一個已經(jīng)存在的e元素添加中HashSet中,新添加的元素是不會保存到HashMap中,所以這就滿足了HashSet中元素不會重復的特性。
[java] view%20plain copyremove如果指定元素存在于此%20set%20中,則將其移除。底層使用HashMap的remove方法刪除指定的Entry。
[java] view%20plain copyclear從此%20set%20中移除所有元素。底層調用HashMap的clear方法清除所有的Entry。
[java] view%20plain copyclone返回此 HashSet 實例的淺表副本:并沒有復制這些元素本身。
后記:
由于HashSet底層使用了HashMap實現(xiàn),使其的實現(xiàn)過程變得非常簡單,如果你對HashMap比較了解,那么HashSet簡直是小菜一碟。有兩個方法對HashMap和HashSet而言是非常重要的,下篇將詳細講解hashcode和equals。
-------------------------------------------------------------------------------------------------
新聞熱點
疑難解答