`
benx
  • 浏览: 272796 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HashCode 和 equal

    博客分类:
  • java
 
阅读更多
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
分享到:
评论

相关推荐

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

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

    Java中hashCode和equals方法的正确使用

    在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。  hashCode()和equals()定义在Object类中,这...

    【面试】hashCode与equals两者之间的关系 / == 和equals / 为什么要重写equals方法 / 重写equals /hashcode方法 / 为什么要重写hashCode方法

    文章目录1、hashCode与equals两者之间的关系2、== 和equals的区别`3、为什么要重写equals()方法?4、重写equals()方法5、为什么要重写hashCode()方法?6、什么时候需要重写hashCode()方法?7、重写hashCode()方法: ...

    string-hashcode:java.lang.String.hashCode

    字符串哈希码 字符串的其他实用程序。... equal ( code , code2 ) ;原料药hashCode(str)参数: str:字符串对象返回: 编号:哈希码返回字符串的哈希码。 请注意,哈希码对于特定字符串是不可变的。执照麻省理工学院

    Java中equals()与hashCode()的原理与设计

    1、何时需要重写equals() ...  如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。  简单的说,“相等的对象必须具有相等的散列码”。  3、什么是equals()与如何设计equals()

    java中重写equals和重写hashCode()

    主要介绍了java中重写equals和重写hashCode()的相关资料,需要的朋友可以参考下

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗? 面试官问我,为什么重写equals函数,必须重写hashCode函数,我当时就懵住了。 然后扯天扯地,然后面试官瞬间就饱了,痛定思痛,写下这篇博客 首先看...

    javaee_tedu_day09.zip

    ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString...如果equal返回true的话,hashCode相同,重写hashCode方法

    解析Java对象的equals()和hashCode()的使用

     在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,要设计另外一个。在多数情况 下,这两个函数是不用考虑的,直接使用它们的默认设计可以了。但是在一些情况下,这两个...

    Java-Reflection-and-Object-Comparison-in-Java:Java Reflection创建适当的对象,覆盖equal和hashCode方法

    Java中的Java反射和对象比较 项目介绍 首先,通过以下方式设计Java类: 2个私有数据成员int IntValue; 字符串StringValue; 空构造函数定义公共方法void setIntValue(int iIn){...}定义公共方法void ...

    Java equals 方法与hashcode 方法的深入解析

    面试时经常会问起字符串比较相关的问题,比如:字符串比较时用的什么方法,内部实现如何?hashcode的作用,以及重写equal方法,为什么要重写hashcode方法?以下就为大家解答,需要的朋友可以参考下

    Java中的hashcode方法介绍

    主要介绍了Java中的hashcode方法介绍,还是比较不错的,这里分享给大家,供需要的朋友参考。

    Java面试题.docx

    20、Object类的equal和hashCode方法重写,为什么? 21-40题 21、List,Set,Map的区别 26、ArrayMap和HashMap的对比 29、HashMap和HashTable的区别 30、HashMap与HashSet的区别 31-40题 31、HashSet与HashMap...

    sun公司开源jar -log.jar

    sun公司开源的jar包,里面封装了log4的日志以及关于自动生成hashcode代码以及重写equal方法的jar

    关于重写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 ...

    学生集合排序

    将学生对象放入一个集合,通过重写学生类的hashcode与equals方法,以及通过collections工具类调用实现caparator接口类的专门比较器及方法,对存放学生的集合进行多属性排序

    简单概括 ==跟equals的区别

    ==  == :既可以比较基本类型,也可以比较引用类型,如果...hashCode(重写equals就一定要重写hashCode)  没有重写hashCode值不会变,重写了hashCode值就会改变     总结:==跟equals的区别 1. ==既可以比较基本

    8张图理解Java

    一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有多的票选。...  如果两个对象相等(equal),那么他们一定有相同的哈希值。  如果两个对象的哈希值相同,但他们未必相等(e

    sample:核心 Java 示例

    样本 核心 Java 示例 1.Comparable Vs Comparator 2.Equal() & HashCode() 契约 3.Runtime Class 4.Uninstantiable Class 5.Immutable Class

Global site tag (gtag.js) - Google Analytics