面试必备之为什么重写equals必须重写hashcode

印象中是来自

https://github.com/Snailclimb/JavaGuide

Object.hashcode的通用约定为:

1.在一个应用执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,那么对该对象调用hashCode方法多次,它必须始终如一地返回同一个证书;在同一个应用程序的多次执行过程中,这个证书可以不同,即这个应用程序这次返回的证书与下一次执行返回的证书可以不一致。
2.如果两个对象根据equals(Object)方法是相等的,那么调用者两个对象中任一个对象的hashCode方法必须产生同样的整数结果。
3.如果两个对象根据equals(Object)方法是不相等的,那么调用者两个对象中任一个对象的hashCode方法,不要求必须产生不同的证书结果。

如果只重写了equals方法而没有重写hashCode方法的话,则会两个对象根据equals(Object)方法返回相等,但对调用者两个对象中任一对象进行hashCode方法不产生同样的结果。

原文地址:https://www.cnblogs.com/zbb2161228/p/10424928.html

时间: 2024-10-15 18:13:46

面试必备之为什么重写equals必须重写hashcode的相关文章

【原创】关于java对象需要重写equals方法,hashcode方法,toString方法 ,compareto()方法的说明

在项目开发中,我们都有这样的经历,就是在新增表时,会相应的增加java类,在java类中都存在常见的几个方法,包括:equals(),hashcode(),toString() ,compareto()这四个方法,对于刚刚接触java的初学者来说,对于这块可以没有更深入的了解,只是单纯意义上的复制粘贴,并没有很好的去了解.现在借用这个时间给大家说说这几个方法作用. equals: 比较两个对象相等时使用(需要配合Hashcode一起使用,在后边再进行详细解释)   hashcode: 重写has

HashSet中存方用户自定义数据类型数据,重写equals方法和hashCode方法

import java.util.Set; import java.util.HashSet; public class SetTest { public static void main(String[] args) { /* *对于用户自定义类型的数据放在容器(Set)中 *务必重写equals和hashCode方法 *要不然stu1和stu2放在容器中,和认为是两个不同的元素 **/ //set中存放的元素是无序的 //set中存储的元素是不可以重复的(根据equals方法和hashCod

JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法

在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { private String province; private String city; public String getProvince() { return province; } public void setProvince(String province) { this.province = p

为什么重写equals还要重写hashcode

参考回答: HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的.HashMap中的比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等再比较equals(),若相等则认为他们是相等的.若equals()不相等则认为他们不相等.如果只重写hashcode()不重写equals()方法,当比较equals()时只

重写equals()方法和 hashCode()方法

java中判断两个对象是否相等的规则:首先,判断两个对象的hashCode是否相等 如果不相等,认为两个对象也不相等 如果相等,则判断两个对象用equals运算是否相等 如果不相等,认为两个对象也不相等 如果相等,认为两个对象相等 我们在equals方法中需要向下转型,效率很低,所以先判断hashCode方法可以提高效率. equals()相等的两个对象,hashcode()一定相等: equals()不相等的两个对象,却并不能证明他们的hashcode()不相等. 1,所有Java类都继承自O

Java重写equals方法和hashCode方法

package com.ddy; public class User {     private Integer id; private String name; private String address; private String phone; public Integer getId() {         return id;     } public void setId(Integer id) {         this.id = id;     } public Strin

重写equals() 和 hashCode()方法

去重操作时, 有时候往Set集合存放对象User,我们User类的字段太多时,比如有50个字段, 判断两个User对象相同,不需要判断它们所有字段都相同,只需要判断它们的某几个字段相同,就定为它们俩重复, 这时候需要重写Equals()方法和HashCode()方法, public class User { private String name; private int age; private String passport; //getters and setters, construct

正确重写equals方法和compareTo方法

一.概述 程序要对一堆数据元素排序,查找,增加删除.数据节点 class Node{ int type; int index; int score; } 规则: 1)对象相等:两个节点n1与n2,如果n1.type == n2.type && n1.index == n2.index则n1等于n2 2)排序:升序,比较score,score相同则比较type,type相同则比较index.最开始我使用TreeMap存储.实现Comparable接口,重写equals方法与hashCode方

JAVA中equals方法与hashCode方法学习

首先参考文章:http://www.oschina.net/translate/working-with-hashcode-and-equals-methods-in-java 1,equals方法的比较与 == 的区别是什么?为什么需要重写equals方法? 2,为什么说重写了equals方法最好重写hashCode方法?该问题在参考博文里面有一个实例解释了原因. 3,如何重写equals方法和hashCode方法? ——————————————————————————————————————