`

hascode 和 equals为什么要一起重写?

 
阅读更多
hascode和equals方法要一起重写这是hashCode方法的常规协定:

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

把对象放入hash表这种结构时会调用hashCode方法.先用hashCode方法判断要存储的位置,再用equals方法判断表中是否已经存在了一个内容相同的元素.
分享到:
评论

相关推荐

    java中hashcode()和equals()方法详解

    更清楚的了解hashcode()和equals()方法。

    Hibernate注解映射联合主键

    第三、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并要重写equals和hashcode.最后在主类中(该类包含联合主键类中的字段)将联合主键字段都注解为@Id,并在该类上方将上这样的注解:@Id...

    Java中典型的内存泄露问题和解决方法

    主要介绍了Java中典型的内存泄露问题和解决方法,典型的内存泄露例子是一个没有实现hasCode和equals方法的Key类在HashMap中保存的情况,可以通过实现Key类的equals和hasCode方法解决这种内存泄漏问题,需要的朋友可以...

    java集合知识-map、set等

    如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。 如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。 记住:如果元素要存储到HashSet集合中,必须覆盖...

    lombok-1.16.16源码和文档

      默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。 @ToString   生成toString方法,默认情况下,会输出类名、所有属性,属性会...

    CursoJava:NélioAlves的Udemy课程

    对象类别构造函数,getter,setter,toString,equals,hasCode方法; 超载; 封装; 保留字这个; 遗产; 多态性内存中对象,数组和列表的行为; 枚举; 对象的组成; 异常处理; 使用Scanner进行数据输入和读取文件...

    Java回顾(六)Set集合

    1、Set集合 1.1、Object中的hashCode值 默认情况下,不同对象的hashCode值是不相同的,除非之前已经把hashCode值重写了。 不同的英文单词的hashCode值是不... //hasCode返回值是int类型 System.out.println("hello".ha

    详解Java中用于查找对象哈希码值的hashCode()函数

    Java中入HashMap等一些键值对应的结构,基本上都可以用hashCode()来查找值,接下来我们就来详解Java中用于查找对象哈希码值的hashCode()函数:

    glassfish-continuous-deployment-tutorial

    我正在通过 Micha Kops 教程学习使用 arquillian 和 jenkins。 访问: hasCode.com

Global site tag (gtag.js) - Google Analytics