此時我們來分析當新增重複元素進hashset集合時的情況
原始碼如下:
add方法:
public
boolean
add(e e)
put方法:
public v put
(k key, v value)
hash()方法:
static
final
inthash
(object key)
putval()方法:
final v putval
(int hash, k key, v value,
boolean onlyifabsent,
boolean evict)
if(e.hash == hash &&
((k = e.key)
== key ||
(key != null && key.
equals
(k))))
break
; p = e;}}
if(e != null)
}++modcount;if(
++size > threshold)
resize()
;afternodeinsertion
(evict)
;return null;
}
當我們像集合中新增元素時候,首先會判斷集合中是否存在重複元素,如果存在重複元素,那麼會返回第乙個jim到add方法,此時顯然不為空,那麼
return map.
put(e, present)
==null;
此時顯然為false,儲存失敗
需要我們注意的是,hash()方法主要用來判斷元素內容是否相等
演示如下:
string str1 =
"111"
; string str2 =
newstring
("111");
system.out.
println
(hash
(str1));
//48657
system.out.
println
(hash
(str2));
//48657
student stu1 =
newstudent()
; student stu2 =
newstudent()
; system.out.
println
(hash
(stu1));
//1 system.out.
println
(hash
(stu2));
//1 (重寫了student類中的hash方法,返回值為1)
詳述HashSet類add方法(一)
我們知道,add方法可以用來向集合中新增元素,對於hashset集合來說,不允許儲存重複的元素,當我們儲存元素的時候,集合會對新增進來的元素進行判斷是否重複,首先我們對新加元素進行分析 add方法原始碼 jdk 11.0.4 public boolean add e e 此時我們發現,返回值是乙個布...
詳述HashSet類add方法(一)
詳述hashset類add方法 一 分析第一次新增資料的步驟 public class test2 1.呼叫hashset add 方法,原始碼如下 public boolean add e e 2.返回map.put 值,key為e,value值為present常量,方法原始碼如下 public ...
詳述HashSet類add方法(三)
詳述hashset類add方法 三 public class test1 學生類 public class student 1.當第二次新增學生物件時,首先呼叫add 方法 public boolean add e e 2.呼叫map.put 方法,present是乙個常量,存第乙個和第二個值的時候...