hashcode

作者: 欢乐时光欢乐你我 | 来源:发表于2017-06-25 18:57 被阅读2次

    JAVA中重写equals()方法的同时要重写hashcode()方法

    object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;

    注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。如下:

    (1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true

    (2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false


    Java对于eqauls方法和hashCode方法是这样规定的:

    1 如果两个对象相同,那么它们的hashCode值一定要相同。也告诉我们重写equals方法,一定要重写hashCode方法。

    2 如果两个对象的hashCode相同,它们并不一定相同,这里的对象相同指的是用eqauls方法比较。

    比较两个String 相等  ,不要只靠hashCode比较

    原因:

    Java中String.hashCode()方法的算法如下:str.charAt(0) * 31n-1+ str.charAt(1) * 31n-2+ ... + str.charAt(n-1)

    据说算法中31这个数字是对英文字符进行优化后产生的一个最佳数字,但是碰上字母大小写或是一些特殊字符,再或者是中文字符,它就不灵了,很容易重复,举个例子:

    String  a="Aa";

    String  b="BB";

    int aa = a.hashCode();

    int bb = b.hashCode();

    字符串a与b的hashCode取值是相同的,都是2112

    相关文章

      网友评论

        本文标题:hashcode

        本文链接:https://www.haomeiwen.com/subject/miifcxtx.html