重写hashcode和没有重写的区别

简介: 重写hashcode和没有重写的区别

重写hashcode和没有重写的区别


1.public boolean equals(Object obj),和hashcode()方法是object对象中的方法。

1.public boolean equals(Object obj),和hashcode()方法是object对象中的方法。


  • 如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;
  • 如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)即


(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true

(2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false


3为啥重写equals?


如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址,重写之后目的是为了比较两个对象的value值是否相等。

特别指出利用equals比较八大包装对象(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,

默认比较的是值,在比较其它自定义对象时都是比较的引用地址


4.什么是hashcode?


hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,

都是根据存储对象的hashcode值来进行判断是否相同的。

由于为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,

那没就不必在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,


其实简单的说就是为了保证同一个对象,保证在equals相同的情况下hashcode值必定相同,

如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的 (因为equal都是根据对象的特征进行重写的),但hashcode确实相同的

目录
相关文章
|
5月前
|
存储 算法 Java
为什么要重写 hashcode 和 equals 方法
为什么要重写 hashcode 和 equals 方法
47 0
|
10月前
|
存储
重写equals后为什么要重写hashcode方法
重写equals后为什么要重写hashcode方法
63 0
|
5月前
|
自然语言处理 算法 Java
为什么说重写equals时要重写hashcode
为什么说重写equals时要重写hashcode
|
5月前
|
存储 IDE Java
为什么重写 equals() 时必须重写 hashCode() 方法?(简单易理解)
为什么重写 equals() 时必须重写 hashCode() 方法?(简单易理解)
39 1
|
Java
方法的重写
方法的重写
54 0
|
存储
为什么重写 equals 方法就必须重写 hashCode 方法?
为什么重写 equals 方法就必须重写 hashCode 方法?
72 0
为什么要重写 hashcode 和 equals 方法?
为什么要重写 hashcode 和 equals 方法?
76 0
|
存储 Java 对象存储
JavaSE——为什么重写equals的同时一定要重写hashCode?
JavaSE——为什么重写equals的同时一定要重写hashCode?
JavaSE——为什么重写equals的同时一定要重写hashCode?
|
Oracle Java 关系型数据库
为什么重写 equals() 方法,一定要重写 hashCode() 呢?| HashMap
首先我们有一个假设:任何两个 object 的 hashCode 都是不同的。 那么在这个条件下,有两个 object 是相等的,那如果不重写 hashCode(),算出来的哈希值都不一样,就会去到不同的 buckets 了,就迷失在茫茫人海中了,再也无法相认,就和 equals() 条件矛盾了,证毕。
146 0
为什么重写 equals() 方法,一定要重写 hashCode() 呢?| HashMap
|
存储 算法 Java
(强制)要求覆写equals必须覆写hashCode(原理分析)
hashCode和equals hashCode和equals用来标识对象,两个方法协同工作可用来判断两个对象是否相等。众所周知,根据生成的哈希将数据散列开来,可以使存取元素更快。对象通过调用Object.hashCode()生成哈希值;由于不可避免会存在哈希值冲突 的情况,因此当hashCode相同时,还需要再调用equals进行一次值的比较;但是若hashCode不同,将直接判定Object不同,跳过equals,这加快了冲突处理效率。Object类定义中对hashCode和equals要求如下:
226 0