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...