关于 equals()与hashcode()方法

类重写了equals()方法也必须重写hashcode()方法,否则会导致该类无法与基于散列值的集合(HashMap、HashSet、HashTable)一起正常使用。

hashcode()方法遵循的原则:

1、同一个对象多次调用hashcode(),返回的结果必须相等。
2、两个对象equals()方法相等,hashcode()也必须相等。
3、两个对象equals()方法不等,hashcode()不要求必须不等,但是应尽可能的分散以提高散列表的效率



如何重写hashcode():

1.给int变量赋值
2.为对象中每个有意义的字段计算出一个散列码
3.合并
4.返回结果
5.验证结果,确保相同的对象有相同的散列码

demo:

public class Test {
    private String s = null;
    private int id = 0;
    .
    .
    .
    public int hashCode() {
        int result = 17;
        result = 37 * result + s.hashCode();
        result = 37 * result + id;
        return result;
    }
}
原文地址:https://www.cnblogs.com/lchd/p/3481084.html