HashSet的存儲原理


HashSet的底層用哈希散列表來存儲對象(默認長度為16的數組),
假如:

Set set=new HashSet();
set.add(obj);

內部存儲過程為:定義h=obj.hashCode,得到obj對象的哈希碼h,再對h進行hash散列運算,對數組長度進行求余,假如長度為16,則返回一個0-15之間的值,然后這個值就是存在HashSet數組中的下標。如果下標位置沒有對象(不起沖突),則把obj加到該位置;如果已近有對象(起沖突),則用equals判斷兩對象是否相等,相等則舍棄obj,不相等,則把obj以節點的方式加在該對象下面。

 

 所以,只有覆蓋了對象的equals方法和hashCode方法,讓此方法按自己的算法運算的話才能算是相同的對象,覆蓋hashCode方法的原則:

   原則1:讓equals相等的對象返回相同的hashCode(為了過濾掉相等的元素)
   原則2:盡量保證equals不相同的對象返回不同的hashCode(為了添加不同的元素)

 

 

 

 


免責聲明!

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



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