Java中的Set集合接口实现插入对象不重复的原理

Java的Set集合确保插入的元素不重复,主要依赖于对象的hashCode()和equals()方法。根据Object类的规定,相等的物体必须有相同的hashCode,并且当equals()返回true时,hashCode也必须相同。在不重写这些方法的情况下,对象的默认行为基于内存地址,导致不同的实例即使内容相同也会被视为不等。然而,对于像String这样的类,它们重写了hashCode()和equals(),比较基于内容,使得内容相同的字符串在Set中只存储一次。
摘要由CSDN通过智能技术生成

java.lang.Object中对hashCode的约定:

1. 在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。

2. 如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。

3. 如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。


在java的集合中,判断两个对象是否相等的规则是:

1)、判断两个对象的hashCode是否相等 。
      如果不相等,认为两个对象也不相等,完毕
      如果相等,转入2)
(这一点只是为了提高存储效率而要求的,其实理论上没有也可以,但如果没有,实际使用时效率会大大降低,所以我们这里将其做为必需的。后面会重点讲到这个问题。)
2)、判断两个对象用equals运算是否相等 。
      如果不相等,认为两个对象也不相等
      如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)


对于一般类的对象(除String等封装类型对象外):

若普通类没有重写hashcode()和equals()方法,那么其对象在比较时,是继承的object类中的hashcode()方法,obj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值