在使用HashSet或HashMap时,当添加的元素为对象时,为了实现去重,就一定要重写equals方法和hashCode方法,为什么要重写HashCode方法呢?

以HashSet为例,HashSet由HashMap支持,在调用HashSet的add方法时,实际上调用的是HashMap的put方法:
image
而在put方法中,调用了HashMap的hash方法:
image
再来看hash方法的源码:
image
可以看到在hash方法中的key.hashCode这段代码;key是集合所添加进去的元素,很明显,如果不在添加的元素的类中重写hashCode方法,那么不同对象所产生的哈希值将不同。而HashSet去重是依靠putVal方法,通过比较哈希值等办法来实现。


Polymorph
1 声望0 粉丝