在使用HashSet或HashMap时,当添加的元素为对象时,为了实现去重,就一定要重写equals方法和hashCode方法,为什么要重写HashCode方法呢?
以HashSet为例,HashSet由HashMap支持,在调用HashSet的add方法时,实际上调用的是HashMap的put方法:
而在put方法中,调用了HashMap的hash方法:
再来看hash方法的源码:
可以看到在hash方法中的key.hashCode这段代码;key是集合所添加进去的元素,很明显,如果不在添加的元素的类中重写hashCode方法,那么不同对象所产生的哈希值将不同。而HashSet去重是依靠putVal方法,通过比较哈希值等办法来实现。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。