如果想让`HashSet`不接受重复的`Student`对象,应该如何修改`hashCode()`方法?
时间: 2024-06-14 14:01:51 浏览: 14
在Java中,如果你想让`HashSet`不接受重复的`Student`对象,即使它们的属性值相同但对象不同(即非浅拷贝),你需要确保`hashCode()`和`equals()`方法一起工作。`hashCode()`方法用于快速定位哈希表中的位置,而`equals()`方法用于判断两个对象是否相等。
为了实现这一点,`hashCode()`方法应该基于对象的属性来生成一个唯一的散列码,这样相同的属性值会产生相同的散列码。同时,当两个对象通过`equals()`方法判断相等时,它们的`hashCode()`也应该是相等的。这是因为在Java中,如果两个对象`a`和`b`满足`a.equals(b)`,那么`a.hashCode()`应该等于`b.hashCode()`。
假设你有一个`Student`类,其定义如下:
```java
public class Student {
private String name;
private int id;
// getters and setters
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
Student student = (Student) obj;
return name.equals(student.name) && id == student.id;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + name.hashCode();
result = 31 * result + id;
return result;
}
}
```
在这个例子中,`hashCode()`方法基于`name`和`id`计算散列码,这样如果有两个`Student`对象具有相同的`name`和`id`,它们就会被认为是相等的,且`hashCode()`也会返回相同的值,从而避免添加到同一个`HashSet`中。