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

如果自定义类的插入查重,就要重写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,当且仅当x和y不是同一类型的对象; 3. 对象的字段值相等返回true,即当且仅当x和y的每个字段都相等,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类的对象;最后比较了name和age字段的值是否相等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值