为什么要覆盖Java中的equals和hashcode

原创 2015年11月18日 16:42:42

  众所周知,覆盖equals方法必须覆盖hashcode方法。那么,为什么要覆盖equalshashcode方法呢?


     1.equals

    list列表的list.contains()方法中,判断是否包含用的是equals方法。所以,针对自定义对象应该重写equals。

    

2.hashcode

     在hashMap的containsKey()方法中,判断是否包含键(加入键是自定义对象)时,索引数组(hashmap由数组和链表组成--不懂的请自补)用到了对象的hashcode。所以,针对自定义对象也应该重写hashcode。

 

   综上:

       如果两个对象相等(使用equals()方法),那么必须拥有相同的哈希码(使用hashCode()方法)。
        即使两个对象有相同的哈希值(hash code),他们不一定相等.意思就是: 多个不同的对象,可以返回同一个hash值。


参考: http://book.51cto.com/art/201202/317533.htm

http://blog.csdn.net/renfufei/article/details/14163329


java中对象的equals和hashcode覆盖原则

因为如果只覆盖了equals而没有覆盖hashCode, 则两个不同的instance a和b虽然equals结果(业务逻辑上)相等,但却会有不同的hashcode,这样hashmap里面会同时存在a...
  • a151296
  • a151296
  • 2015年02月08日 02:11
  • 989

Java bean 下 覆盖equals 和HashCode方法 的实现和作用

1.原理 有时候使用集合的时候我们希望集合里面的对象要是不一样的,但是每个对象都进行new 操作实例对象,我们在使用对象的引用去equals比较都是为false,即会导致这两个对象引用变量一直不同,但...

Java 覆盖equals和hashCode方法

覆盖equals方法看起来似乎很简单,但是有许多覆盖方式会导致错误,并且后果非常严重,最容易避免这类问题的办法就是不覆盖equals方法。 什么时候需要覆盖equals方法?如果类具有自己特有的“逻...
  • RickyIT
  • RickyIT
  • 2017年02月17日 11:30
  • 427

Effective Java 第九条:覆盖equals时总要覆盖hashCode

先来看一个例子:PhoneNumer类 public class PhoneNumber { private final int areaCode; private final in...

Effective Java (9) 覆盖equals时总要覆盖hashCode

这个是一直强调的了。 hashCode会被

Effective Java Item9-在覆盖equals方法的同时覆盖hashCode

Effective Java 2nd Edition Reading Notes Item9: Always override hashCode when overrideing equals 在...
  • pcsxk
  • pcsxk
  • 2015年04月20日 22:49
  • 384

《Effective java》读书记录-第9条-覆盖equals时总要覆盖hashCode

在每个覆盖equals方法的类中,也必须覆盖hashCode方法。 散列函数应该把集合中不相等的实例均匀地分布到所有可能的散列值上。 如果一个类是不可变的,就应该考虑把散列码缓存在对象内部,而不是每次...

Effective Java - 对于所有对象都通用的方法 - 覆盖 equals 时请总要覆盖 hashCode

读书笔记 仅供参考Object.hashCode 通用约定如果在覆盖了 equals 方法的类中没有覆盖 hashCode 方法,就会违法 Object.hashCode 的通用约定,导致所有基于 h...

java覆盖equals()方法时总要覆盖hashCode()

我们再用JAVA创建自己的类的时候,一种比较常见的覆盖就是覆盖Object中的equals()方法和hashCode()方法。如果不这样做的话,就很可能违反Object.hashCode()的通用约定...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为什么要覆盖Java中的equals和hashcode
举报原因:
原因补充:

(最多只允许输入30个字)