为什么要覆盖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 bean 下 覆盖equals 和HashCode方法 的实现和作用

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

Java 覆盖equals和hashCode方法

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

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
  • 348

《问题总结》JAVA什么时候要覆盖toString()、equals()、hashCode()方法??为什么要覆盖呢? 《通俗回答》

-------------------------------------------------------- tostring方法一般是在输出累的时候使用的比如说system.out.print...

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

我们再用JAVA创建自己的类的时候,一种比较常见的覆盖就是覆盖Object中的equals()方法和hashCode()方法。如果不这样做的话,就很可能违反Object.hashCode()的通用约定...

java对象通用方法之覆盖equals时请遵守通用约定、覆盖equals时总要覆盖hashCode、始终要覆盖toString、考虑实现Comparable接口

原文地址: http://www.cnblogs.com/stephen-liu74/archive/2012/01/16/2228360.html 内容摘要: 覆盖equals时请遵守...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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