HashSet的實現原理,簡單易懂


HashSet實際上是一個HashMap實例,都是一個存放鏈表的數組。它不保證存儲元素的迭代順序;此類允許使用null元素。HashSet中不允許有重復元素,這是因為HashSet是基於HashMap實現的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是統一的一個固定對象private static final Object PRESENT = new Object();

HashSet中add方法調用的是底層HashMap中的put()方法,而如果是在HashMap中調用put,首先會判斷key是否存在,如果key存在則修改value值,如果key不存在這插入這個key-value。而在set中,因為value值沒有用,也就不存在修改value值的說法,因此往HashSet中添加元素,首先判斷元素(也就是key)是否存在,如果不存在這插入,如果存在着不插入,這樣HashSet中就不存在重復值。

 所以判斷key是否存在就要重寫元素的類的equals()和hashCode()方法,當向Set中添加對象時,首先調用此對象所在類的hashCode()方法,計算次對象的哈希值,此哈希值決定了此對象在Set中存放的位置;若此位置沒有被存儲對象則直接存儲,若已有對象則通過對象所在類的equals()比較兩個對象是否相同,相同則不能被添加。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM