hashmap 中equals和hashcode方法的区别

如题所述

equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。

hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。
  之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。

  两个obj,如果equals()相等,hashCode()一定相等。
  两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。
所以:
  可以考虑在集合中,判断两个对象是否相等的规则是:
    第一步,如果hashCode()相等,则查看第二步,否则不相等;
    第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。

1、首先equals()和hashcode()这两个方法都是从object类中继承过来的。

  equals()是对两个对象的地址值进行的比较(即比较引用是否相同)。

  hashCode()是一个本地方法,它的实现是根据本地机器相关的。

2、Java语言对equals()的要求如下,这些要求是必须遵循的:

  A 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。

  B 反射性:x.equals(x)必须返回是“true”。

  C 类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。

  D 一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。

  任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。

3、equals()相等的两个对象,hashcode()一定相等;

  反过来:hashcode()不等,一定能推出equals()也不等;

  hashcode()相等,equals()可能相等,也可能不等。
温馨提示:内容为网友见解,仅供参考
无其他回答

hashmap 中equals和hashcode方法的区别
在object类中,hashcode()方法是本地方法,返回的是对象的地址值,而object类中的equals()方法比较的也是两个对象的地址值,如果equals()相等,说明两个对象地址值也相等,当然hashcode()也就相等了;在String类中,equals()返回的是两个对象内容的比较,当两个对象内容相等时,Hashcode()方法根据String类的重写(第2点里面...

equals()和hashCode()方法详解
2. 如果两个对象被认为是不相等的(即通过equals()方法比较结果为false),那么它们的hashCode()方法返回的值应当不同。equals()和hashCode()的正确实现对于提高程序性能和确保数据一致性至关重要。例如,在HashSet中,hashCode()值用于快速定位对象,而equals()用于确认对象是否真正相等。在HashMap中,has...

一文搞懂 == 、equals和hashCode
重写 equals() 的关键在于,当两个对象属性相等时,equals() 返回 true,表明它们相等。然而,如果只重写了 equals() 而未重写 hashCode(),HashMap 和 HashSet 会依据 hashCode() 的结果来存储和查找对象。如果两个对象 equals() 返回 true 但 hashCode() 不同,它们在 HashMap 中可能被视为两...

java中的hashcode()和equals()的作用、区别、联系是什
Java中的`hashCode()`和`equals()`方法是用于对象比较的重要工具。`hashCode()`方法用于生成对象的哈希码,而`equals()`方法用于判断两个对象是否相等。哈希码在哈希表(如HashSet、HashMap)中用于快速定位对象。哈希码是由算法生成的,它代表对象的特征,但并非完全唯一。例如,字符串“aa”和“aa”...

hasCode和equals的区别
equals比较开放,对于业务需求不同,可以自定义其比较的规则,比如string就对equals进行了重写,规定字符串里的字符相等就返回true 在程序执行期间,只要equals方法的比较操作用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法必须始终如一地返回同一个整数。如果两个对象根据equals方法比较是相等的...

说说hashCode() 和 equals() 之间的关系?
hashCode()方法用于生成对象的哈希码,一个整数值,用于哈希表的索引定位。equals()方法则判断两个对象是否相等。两种情况下的hashCode()和equals()关系如下:1. 当对象不会用于散列表(如HashSet, HashMap, Hashtable)时,hashCode()和equals()没有直接关系。hashCode()的作用仅限于对象在内存中的...

【09期】说说hashCode() 和 equals() 之间的关系?
探讨hashCode()与equals()方法的关系是Java面试中常见的基础问题。首先,我们明确hashCode()和equals()的作用:hashCode()方法返回一个整数值,用于哈希表的索引定位。equals()方法用于判断两个对象是否相等。在使用HashSet、Hashtable、HashMap等基于哈希表的数据结构时,hashCode()与equals()之间存在密切...

为什么重写equals()的时候要重写hashCode()?
而hashCode()方法则用于返回对象的哈希值。在哈希表(如Java的HashSet、HashMap)中,哈希值用于计算对象在数组中的位置,以实现高效查找和存储。如果两个对象的哈希值相同,可能会导致哈希冲突,这时需要通过其他方法(如链表或二次寻址)解决。那么,为什么在重写equals()方法时需要同时重写hashCode()方法...

java里equals和hashCode之间什么关系
理解equals的应用:它是用于用户在进行对比的时候,这个时候对比的是内容是否相等理解hashcode的应用:例如set集合,它的不可重复,进行对比的便是hashcode是否相等,因此set集合实现了不可重复。如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成...

java set equals 和 hashcode 同时重写 为什么
equals 方法很好理解,区别于直接比较对象内存地址的 == ,它被设计为用来比较对象内容语义上的相等。而要理解 hashcode 方法,首先你要知道什么是散列算法,了解一下 HashMap 底下的存储结构和存放读取数据的过程(对 key 调用 hashcode 得散列值,找到该散列值对应的桶,往桶里放 value)。你可以认为 ...

相似回答