ArrayList,HashSet判断对象是否重复的原理,arraylisthashset
分享于 点击 49544 次 点评:61
ArrayList,HashSet判断对象是否重复的原理,arraylisthashset
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
相关文章
- 暂无相关文章
用户点评