您的位置:首页 > 其它

ArrayList,HashSet判断对象是否重复的原理

2017-12-14 09:27 495 查看
HashSet集合由于是无序的,其判断唯一的依据是元素类型的hashCode与equals方法的返回结果。规则如下:
      先判断新元素与集合内已经有的旧元素的HashCode值
         如果不同,说明是不同元素,添加到集合。
         如果相同,再判断equals比较结果。返回true则相同元素;返回false则不同元素,添加到集合。

所以,使用HashSet存储自定义类型,如果没有重写该类的hashCode与equals方法,则判断重复时,使用的是地址值,如果想通过内容比较元素是否相同,需要重写该元素类的hashcode与equals方法。

     自定义类的equals方法仿照String重写hashcode() 代码如下

     String类型的调用自身的hashCode方法+int类型的*较大的数即可

public int hashCode() {
int h = 0;
Iterator<E> i = iterator();
while (i.hasNext()) {
E obj = i.next();
if (obj != null)
h += obj.hashCode();
}
return h;
}


eclipse重写 equals() 和Hashcode()的快捷键:Alt+Shift+S
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: