黑马程序员技术交流社区
标题:
hashCode 复写问题
[打印本页]
作者:
梁枝武
时间:
2012-11-13 22:35
标题:
hashCode 复写问题
本帖最后由 梁枝武 于 2012-11-14 17:30 编辑
String 类中对hashCode进行了复写
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];//这个表达式是什么意思??
}
hash = h;
}
return h;
}
还有为什么在定义的类中重写了equals的同时也同时重写hashCode呢??
作者:
李计伟
时间:
2012-11-13 23:20
重写了equals()和hashCode()方法这是为了让元素的唯一性,先比较的是hash值(内存地址).当哈希值一样时才会执行equals()方法.如果equals()方法结果是true的话就说明是同一个元素.像hashSet集合要保证元素的唯一就要这么做
public int hashCode()
{
return this.name.hashCode()+this.age*17;
}
public boolean equals(Object obj)
{
if(this==obj)
{
return true;
}
if(!(obj instanceof Student))
{
return false;
}
Student s = (Student) obj;
return this.name.equals(s.name) && this.age == s.age;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2