Java集合框架_第一篇:为什么重写equals()就要重写hashCode()?

本文详细探讨了hashCode与equals的关系,尤其是在散列表中的应用,解释了重写equals时为何需重写hashCode。讲解了不同场景下的行为差异,包括自定义类作为泛型时可能出现的重复元素和哈希冲突,以及如何设计良好的hashCode算法以避免冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

如果面试官问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?

遇到这样的问题,应该怎样回答呢?其实,equals和hashCode都是Object对象中的非final方法,它们设计的目的就是被用来覆盖(override)的,所以在程序设计中还是经常需要处理这两个方法。下面我们一起来看一下,它们到底有什么区别,总结一波!

二、hashCode()方法

hashCode() 方法:

  1. 作用:用于判断两个对象是否相等;
  2. 实现:通过获取到的哈希码来确定该对象在哈希表中的索引位置(tip:HashMap中使用hash作为indexFor的输入),哈希码也称散列码,实际上就是返回一个int整数;
  3. Object类:hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数,并且通过调用hashCode()方法获取对象的hash值。

举个例子

public class DemoTest {
   
   ​
    public static void main(String
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祖母绿宝石

打赏一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值