hashCode和equal方法

简介: hashCode和equal方法

hashCode

总结

  1. 提高具有哈希结构的容器的效率。
  2. 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的。
  3. 两个引用,如果指向的是不同对象,则哈希值是不一样的。
  4. 哈希值主要根据地址号来的,不能完全将哈希值等价于地址。

equal和==

==(比较运算符)的用法

  1. 既可以判断基本类型,又可以判断引用类型
  2. 判断基本类型,它们的值是否相等
  3. 判断引用类型,它们的地址是否相等,即判断是不是一个对象

equal 方法

  1. 是object类中的方法,只能判断引用类型
  2. 默认判断地址是否相等,子类往往重写该方法,用于判断内容是否相等。

为什么要重载equal方法?

答:因为Object的equal方法默认是两个对象的引用的比较,意思就是指向同一内存,地址则相等,否则不相等;如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。

为什么重载hashCode方法?

答:一般的地方不需要重载hashCode,只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode,那么为什么要重载hashCode呢?就HashMap来说,好比HashMap就是一个大内存块,里面有很多小内存块,小内存块里面是一系列的对象,可以利用hashCode来查找小内存块hashCode%size(小内存块数量),所以当equal相等时,hashCode必须相等,而且如果是object对象,必须重载hashCode和equal方法。

为什么equals()相等,hashCode就一定要相等,而hashCode相等,却不要求equals相等?

答:

  1. 因为是按照hashCode来访问小内存块,所以hashCode必须相等。
  2. HashMap获取一个对象是比较key的hashCode相等和equal为true。
相关文章
|
6天前
|
存储 Java
两个对象的 hashCode()相同,则 equals()
当两个对象的 `hashCode()` 方法返回值相同时,这两个对象的 `equals()` 方法不一定返回 `true`。`hashCode()` 相同仅表示两对象可能相等,需进一步通过 `equals()` 方法验证对象是否真正相等。
|
4月前
|
Java 容器
equals与hashcode的区别与联系
equals与hashcode的区别与联系
|
6月前
|
存储 Java 对象存储
当hashCode相同时,equals是否也相同?
当hashCode相同时,equals是否也相同?
36 0
|
6月前
|
存储 Java
为什么要重写hashCode()和equals()(深入了解)
为什么要重写hashCode()和equals()(深入了解)
为什么要重写 hashcode 和 equals 方法?
为什么要重写 hashcode 和 equals 方法?
83 0
|
存储 NoSQL
简单讲一下 HashCode() 与 equals()方法
简单讲一下 HashCode() 与 equals()方法.
112 0
|
存储 Java 索引
都2022年了,不会还有人hashCode方法都讲解不清楚吧
都2022年了,不会还有人hashCode方法都讲解不清楚吧
hashCode和equals的区别
hashCode和equals的区别
327 0
|
存储 缓存 算法
关于 equals 和 hashCode,看这一篇真的够了!
这几天在尝试手撸一个类似Lombok的注解式代码生成工具,用过Lombok的小伙伴知道,Lombok可以通过注解自动帮我们生产equals()和hashCode()方法,因此我也想实现这个功能,但是随着工作的深入,我发现其实自己对于equals()和hashCode()的理解,也处在一个很低级的阶段。
关于 equals 和 hashCode,看这一篇真的够了!
|
存储 算法 Java
equals 和 hashCode 到底有什么联系?
写在前面 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和hashCode()都不是final方法,都可以被重写(overwrite)。
equals 和 hashCode 到底有什么联系?