HashSet原始碼,add方法如何保證元素唯一性

2022-01-14 04:03:47 字數 487 閱讀 9553

e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))

因為hash值一樣,物件未必相等,所以還得繼續比較,位址值和內容。

物件相等 ====>> hashcode一定相等;

物件不等 ====>> hashcode有可能相等,有可能不等;

所以是一對多的關係!

hashcode相等 **********> 物件不一定相等;

hashcode不等**********> 物件肯定相等。

相同繼續比,不同直接新增

暈了,畫個圖

網上找到了很多大佬的解釋,可供參考,各有千秋

這個到位

詳述HashSet類add方法底層原始碼(一)

目錄 一 hashset add方法 二 hashmap put方法 hash key 三 hashmap putval方法 resize 以下面的 為例 新增第乙個值 實則為呼叫hashmap中的put方法 static final int hash object key 注釋 第一次新增值,ta...

詳述HashSet類add方法(一)

我們知道,add方法可以用來向集合中新增元素,對於hashset集合來說,不允許儲存重複的元素,當我們儲存元素的時候,集合會對新增進來的元素進行判斷是否重複,首先我們對新加元素進行分析 add方法原始碼 jdk 11.0.4 public boolean add e e 此時我們發現,返回值是乙個布...

詳述HashSet類add方法(二)

此時我們來分析當新增重複元素進hashset集合時的情況 原始碼如下 add方法 public boolean add e e put方法 public v put k key,v value hash 方法 static final inthash object key putval 方法 fin...