== 和 equals 区别是什么?hashCode()和equals关系

本文详细介绍了Java中`==`与`equals()`的区别,`equals()`的重写原则以及`hashCode()`的作用。强调了在哈希表如HashSet中,`hashCode()`与`equals()`的关系,当HashSet达到1000个元素后,插入新元素时会如何处理哈希冲突。同时,探讨了String类的hashCode()计算方法。
摘要由CSDN通过智能技术生成

[Q&A] == 和 equals 区别

  1. == 对于基本数据类型来说,比较的是;对于引用数据类型来说,比较的是对象的内存地址。 主要判断两个对象是否为同一个对象

  2. equals() 未重写等价于==;重写equals(),则按重写逻辑。主要判断两个对象内容是否相等

  3. ==不会NPE,但是equals() 会引起NPE

在这里插入图片描述

[Q&A] java对equals()的要求

1. 对称性:如果x.equals(y)返回是"true",那么y.equals(x)也应该返回是"true"2. 反射性:x.equals(x)必须返回是"true"3. 类推性:如果x.equals(y)返回是"true",而且y.equals(z)返回是"true",那么z.equals(x)也应该返回是"true"4. 一致性:如果x.equals(y)返回是"true",只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是"true"5. 非空性:x.equals(null),永远返回是"false";x.equals(和x不同类型的对象)永远返回是"false"

在这里插入图片描述

hashCode()介绍

  1. hashCode() 返回一个整数,称为对象的散列码(hash code)。散列码用于快速定位对象在散列表中的位置。
    哈希表存储的是键值对 (key-value)。散列表的本质是通过数组实现的,计算 key 得到的哈希码确定了 value在数组中的索引的位置,所以知道了 key 就可以取出来 value。

  2. hashCode()Object的方法,所以Java中的任何类有 hashCode() 函数。

  3. [Q&A] hashCode() 和 equals() 的关系
    如两个对象相等(根据 equals() 方法),则它们的散列码必须相同。如果两个对象不相等(根据 equals() 方法),则它们的散列码不一定不同。

  4. hashCode() 方法主要用于那些基于散列的数据结构中,比如 HashMap, HashSet, Hashtable 等。

  5. 在 Java 中,排序通常依赖于 Comparable 的 或 Comparator接口,而不是 hashCode()equals() 方法。


[Q&A] HashSet中已经有1000个元素。当插入第1001个元素时,需要怎么处理?

1) 将第1001个元素逐个的和前面1000个元素进行比较 效率低下!!
2)当把对象加入 HashSet 时,HashSet 会先计算对象的 hashcode 值,如果没有相同的hashcode,HashSet会视为对象没有重复出现。 如果发现有相同 hashcode 值的对象,这时会调用equals()方法来检查内容是否相同。如果相同,HashSet 不会让其加入。如果不同的话,就会重新散列到其他位置。 这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。


参考

==和 equals 的区别
Java hashCode() 和 equals()的若干问题解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值