资讯专栏INFORMATION COLUMN

Object的hashCode方法与equals方法的关系

princekin / 2595人阅读

摘要:的常规协定是在应用程序执行期间,在对同一对象多次调用方法时,必须一致地返回相同的整数,前提是将对象进行比较时所用的信息没有被修改。因此,重写方法以后,原来的系统的方可能不太适用。

hashCode 的常规协定是:

在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。

因此不同的对象一般hashcode要不一样。因此,重写equals方法以后,原来的系统的hashcode方可能不太适用。一般要重写hashcode方法。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65310.html

相关文章

  • 第3章:抽象数据类型(ADT)和面向对象编程(OOP) 3.5 ADT和OOP中等价性

    摘要:抽象函数引发的关系是等价关系。所以当且仅当通过调用抽象数据类型的任何操作不能区分它们时,两个对象是相等的。必须为每个抽象数据类型适当地定义操作。一般来说,在面向对象编程中使用是一种陋习。 大纲 什么是等价性?为什么要讨论等价性?三种等价性的方式==与equals()不可变类型的等价性对象契约可变类型的等价性自动包装和等价性 什么是等价性?为什么要讨论等价性? ADT上的相等操作 ADT...

    Fundebug 评论0 收藏0
  • Java equals 和 == 完全解析

    摘要:所以在对象没有重写这个方法时,默认使用此方法,即比较对象的内存地址值。结果为可以发现不管对象的内存地址是否相同并不影响其结果,所以类型比较的是数据值而不是内存地址值。 showImg(https://segmentfault.com/img/bVbqpku?w=800&h=344); 今天朋友突然问到一个问题: 两个对象使用x.equals(y)判断结果为true时,两个对象的hash...

    mikasa 评论0 收藏0
  • 关于equalshashCode方法一些理解

    摘要:而这次在一的一方实体里重写基类的和方法做去重,感觉用的代码量减少了,又能提高效率,所以我这里对这两个方法做些自己的理解。不相等的两个对象,不一定不相等。不相等,那么是一定不等的。文章若有错误之处,欢迎指出。 昨天写hibernate一对多查询的时候,用set集合来储存值,我们都知道java中List集合是有序,可重复的,Set集合是无序,不可重复的。所以当时写这个查询的时候果断用Set...

    ctriptech 评论0 收藏0
  • java equalshashcode

    摘要:简单的一句话结论就是保证你定义的的对象拥有相同的。方法实现等价关系自反性。即一个对象必须等于其自身。对于任意引用值和返回真时,也一定为真传递性。发现一样,调用方法继续比较,发现个对象一样。 简单的一句话结论就是:保证你定义的equal的对象拥有相同的hash code。1)两个对象equals()为真,则它们的hashCode() 一定相同2)两个对象hashCode()相同,equa...

    HollisChuang 评论0 收藏0

发表评论

0条评论

princekin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<