黑马程序员技术交流社区

标题: 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