java中的hashcode

简介:

一般重写equals最好重写hashCode方法,并且产生hashCode使用的对象,一定要和equals方法中使用的一致例如equals中用的是employee的id 那么hashCode也用this的id。

如果判断对象相等了,那么他们的hashCode也一定要相等。

但是如果两个相同的类是不同方式得到的,那么他们的hashCode也肯定不相等,所以hashCode最好是返回这个类里面一个属性的值,我这里例子中用的id的hashCode

 

至于hashCode中的17 31 只是一个素数,直接返回this.getId().hashCode();也是可以的。在网上看说是为了避免重复,还不知道为什么...

 

@Override
    public boolean equals(Object object) {
        if(this == object){
            return true;
        }
        if(!(object instanceof Employee)) {
            return false;
        }
        Employee employee= (Employee)object;
        if(this.getId().equals(employee.getId())){
            return true;
        }
        return false;
    }

    @Override
    public int hashCode() {
        //这个类的hashcode其实就是这个类的id*31*17的hashcode
        int  result = 17;
        result = 31 * result + this.getId().hashCode();
        return result;
    }

 

本文转自gaofeng36599 51CTO博客,原文链接:http://blog.51cto.com/786678398/1624260

相关文章
|
存储 Java
【Java基础面试二十一】、说一说hashCode()和equals()的关系
这篇文章讨论了Java中`hashCode()`和`equals()`方法之间的关系,强调如果两个对象相等,它们必须有相同的哈希码,但有相同哈希码的对象未必相等,并解释了这一关系在HashSet集合中判断元素是否重复的应用场景。
【Java基础面试二十一】、说一说hashCode()和equals()的关系
【Java基础面试二十二】、为什么要重写hashCode()和equals()?
这篇文章解释了为什么需要重写`hashCode()`和`equals()`方法:因为Object类的`equals()`默认使用`==`比较,这在业务中通常是不够的,我们需要根据对象内容来比较相等性;同时,为了保持`hashCode()`与`equals()`的联动关系,一旦重写了`equals()`,通常也需要重写`hashCode()`。
【Java基础面试二十二】、为什么要重写hashCode()和equals()?
|
存储 Java 索引
java 中为什么重写 equals 后需要重写 hashCode
java 中为什么重写 equals 后需要重写 hashCode
446 8
|
存储 Java 索引
|
存储 算法 Java
Java 中的 == 运算符、equals 方法和 hashCode 方法
HashMap 中键是不可以重复的,因此它的键就必须是不同的对象,那么这个时候就先用计算速度快的 hashCode 进行比较,若哈希值都不相等,那么这两个对象必然不相等,若是相等的,那么这个就有两种可能出现,一种情况是这两个对象是真的相等,另外一种情况就是出现了罕见的“哈希冲突”现象,那么这个时候就轮到 equals 来进行判断了!在 HashMap 中,键是不可以重复的,也就是说,它们的键都是不相同的,因此就要判断不同对象是否为同一对象。因此,哈希值可以用于判断两个对象是否不等。
405 1
|
算法 Java C++
Java基础Object类的hashCode方法
Java基础Object类的hashCode方法
Java基础Object类的hashCode方法
JAVA中比较对象是否相等的方式是什么?为什么重写equals就一定要重写hashcode?百天百题(3/100)
JAVA中比较对象是否相等的方式是什么?为什么重写equals就一定要重写hashcode?
|
存储 算法 Java
史上最全的Java容器集合之equals 和 hashCode
史上最全的Java容器集合之equals 和 hashCode
315 0
|
存储 算法 NoSQL
Java中的hashCode,真的很容易弄懂
Java中的hashCode,真的很容易弄懂
456 0
Java中的hashCode,真的很容易弄懂