集合 Set 是如何判断放入集合中的对象存在重复的?(结合hashCode()和equals(Object obj))

本文介绍了在自定义类中实现插入查重的方法。当使用HashSet等集合存储自定义对象时,为了确保对象唯一性,需要重写equals方法。此外,为避免hash冲突导致的问题,还需重写hashCode方法。

如果自定义类的插入查重,就要重写equals方法,在这同时,我们还的先重写hashCode方法,不然的话,HashSet插入的时候首先判断的是所生成的hashcode是否相同,如果相同的话,才会调用之前重写的equals方法。

当我们将自定义对象作为Map或Set的键时,由于需要寻找对应的键值对或元素,需要根据hashCodeequals方法来进行比较匹配。因此,重写hashCodeequals方法是非常重要的。 在重写hashCode方法时,我们需要保证同一对象多次调用hashCode方法得到的返回值是相同的。一般来说,可以将对象中的每个字段的hashCode值相加,得到一个综合的hashCode值。 在重写equals方法时,我们需要保证同一对象与自身相等,即x.equals(x)为true;同时,我们需要满足以下条件: 1. 对象与null比较时返回false,即x.equals(null)为false; 2. 对象与其他类比较时返回false,即x.equals(y)为false,当且仅当xy不是同一类型的对象; 3. 对象的字段值相等时返回true,即当且仅当xy的每个字段都相等时,x.equals(y)为true。 下面是一个示例代码: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public int hashCode() { int result = 17; result = 31 * result + name.hashCode(); result = 31 * result + age; return result; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (!(obj instanceof Person)) { return false; } Person other = (Person) obj; return this.name.equals(other.name) && this.age == other.age; } } ``` 在这个示例中,我们重写了Person类的hashCodeequals方法,其中: 1. hashCode方法使用了31这个素数,常量17以及对象的每个字段的hashCode值相加的方式来计算综合的hashCode值。 2. equals方法首先判断了是否为null或同一对象;然后判断了是否为Person类的对象;最后比较了nameage字段的值是否相等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值