向
HashSet
中
add
()
元素时,判断元素是否存在的依据,不仅要比较
hash
值,同时还要结合
equles
方法比较。
HashSet
中的
add
()
方法会使用
HashMap
的
add
()
方法。以下是
HashSet
部分源码:
private static final
Object
PRESENT
=
new
Object
();
private transient
HashMap
<
E
,
Object
>
map
;
public
HashSet
() {
map
=
new
HashMap
<>
();
}
public
boolean
add
(
E e
) {
return
map
.
put
(
e
,
PRESENT
)
==
null
;
}
HashMap
的
key
是唯一的,由上面的代码可以看出
HashSet
添加进去的值就是作为
HashMap
的
key
。所以不会
重复(
HashMap
比较
key
是否相等是先比较
hashcode
在比较
equals
)。