HashCode 和 equal方法重載
1、 為什麼要重載equal方法?
答案:因為Object的equal方法默認是兩個對象的引用的比較,意思就是指向同一內存,地址則相等,否則不相等;如果你現在需要利用對象裏面的值來判斷是否相等,則重載equal方法
2、 為什麼重載hashCode方法?
答案:一般的地方不需要重載hashCode,衹有當類需要放在HashTable、HashMap、HashSet等等hash結構的集合時才會重載hashCode,那麼為什麼要重載hashCode呢?就HashMap來說,好比HashMap就是一個大內存塊,裏面有很多小內存塊,小內存塊裏面是一系列的對象,可以利用hashCode來查找小內存塊hashCode%size(小內存塊數量),所以當equal相等時,hashCode必須相等,而且如果是object對象,必須重載hashCode和equal方法
3、 为什么equals()相等,hashCode就一定要相等,而hashCode相等,却不要求equals相等?
答案:1、因為是按照hashCode來訪問小內存塊,所以hashCode必須相等2、HashMap獲取一個對象是比較key的hashCode相等和equal為true
之所以hashCode相等,卻可以equal不等,就比如ObjectA和ObjectB他們都有屬性name,那麼hashCode都以name計算,所以hashCode一樣,但是兩個對象屬於不同類型,所以equal為false
4、 為什麼需要hashCode?
1、 通過hashCode可以很快的查到小內存塊
2、 通過hashCode比較比equal方法快,當get時先比較hashCode,如果hashCode不同,直接返回false
分享到:
相关推荐
hashCode() 和 equals() 的本质区别和联系 Java 中的每个对象都有 hashCode() 和 equals() 方法,这两个方法的正确实现对于 Java 开发人员来说是非常重要的。本文将详细介绍 hashCode() 和 equals() 的本质区别和...
在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将详细介绍这两个方法的工作原理、使用场景以及它们之间的关系...
1.9 String、StringBuffer、StringBuilder、hashCode和equal - String是不可变的字符串序列。 - StringBuffer和StringBuilder是可变字符序列,其中StringBuffer是线程安全的,StringBuilder则没有线程安全保证。 - ...
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。 hashCode()和equals()定义在Object类中,这...
字符串哈希码 字符串的其他实用程序。... equal ( code , code2 ) ;原料药hashCode(str)参数: str:字符串对象返回: 编号:哈希码返回字符串的哈希码。 请注意,哈希码对于特定字符串是不可变的。执照麻省理工学院
【面试】中提到的几个关键知识点集中在对象比较、equals()和hashCode()方法的使用以及它们之间的关系上。这些概念在Java编程中至关重要,特别是在处理集合类和比较对象时。 1、**hashCode与equals两者之间的关系**...
1、何时需要重写equals() ... 如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。 简单的说,“相等的对象必须具有相等的散列码”。 3、什么是equals()与如何设计equals()
在Java编程语言中,`equals()` 和 `hashCode()` 是两个非常重要的方法,它们主要用于比较对象的平等性以及在散列数据结构(如 `HashMap`、`HashSet` 等)中的对象定位。当我们创建自定义类时,有时需要根据业务需求...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...
正确地重写`hashCode`和`equals`方法对于实现符合预期的行为至关重要,尤其是在自定义对象类中。这两个方法必须保持一致性:如果两个对象相等(`equals`返回`true`),那么它们的`hashCode`值必须相同。反之,如果`...
System.out.println("equal比较:" + str1.equals(str2)); // 输出 true ``` 在这里,`str1.equals(str2)` 返回 `true`,因为两个字符串对象的内容是相同的。 接下来,我们回顾 `equals()` 方法的五个特性: 1. *...
ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString...如果equal返回true的话,hashCode相同,重写hashCode方法
在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,要设计另外一个。在多数情况 下,这两个函数是不用考虑的,直接使用它们的默认设计可以了。但是在一些情况下,这两个...
首先我们看下下面代码及输出和String重写equals和hashcode的源码: package com.zzy.test; public class Test6 { public static void main(String[] args) { String s1="aaa"; String s2="aaa"; String s3=new ...
Java中的Java反射和对象比较 项目介绍 首先,通过以下方式设计Java类: 2个私有数据成员int IntValue; 字符串StringValue; 空构造函数定义公共方法void setIntValue(int iIn){...}定义公共方法void ...
本文将详细探讨如何实现这个过程,重点在于重写`hashCode`和`equals`方法,以及利用`Collections`工具类和自定义比较器来实现多属性排序。 首先,让我们了解`hashCode`和`equals`方法的重要性。这两个方法是Java中...
在这个个人总结中,我们将探讨几个关键的Java知识点,包括对象创建、equals与hashCode方法、对象序列化以及String、StringBuffer和StringBuilder的区别。 首先,让我们来看看创建Java对象的四种方式: 1. **New**...
在使用HashSet和TreeSet时,需要注意hashCode()和equal()方法的实现。hashCode()方法用于计算元素的哈希值,equal()方法用于比较元素的相等性。在覆写这些方法时,需要注意不要把它们和可变属性关联上,否则可能会...
* 43B:类中定义了 hashCode() 方法,但是没有重写 java.lang.Object 中的 hashCode() 方法 * 44C:类中定义了 tostring() 方法,但是没有重写 java.lang.Object 中的 tostring() 方法 * 45C:某些方法名只有大小写...
PS:本文使用jdk1.7解析1.Object类 的equals 方法 代码如下: /** * Indicates whether some other object is “equal to” this one. * * The {@code equals} method implements an equivalence relation * on ...