我正在尝试在 Java 中操作 HashSet。我看到,通常情况下, HashSet 中不可能有重复项?
这是我的代码
public class A{
private int elem;
public A(int elem) {
this.elem = elem;
}
}
在另一个类(class)
import java.util.HashSet;
import java.util.Iterator;
public class B{
private String name;
private HashSet<A> listeA;
public static void main(String[] args){
HashSet<A> a = new HashSet<A>();
B s = new B("B",a);
A l1 = new A(15);
A l2 = new A(14);
A l3 = new A(15);
a.add(l1);
a.add(l2);
a.add(l3);
s.displayHashset();
}
所以如果 HashSet 不允许重复,为什么我在执行代码后有这个:
15
15
14
我不明白如何在我的 HashSet 中接受第二个“15”..
感谢您的回复。
最佳答案
您没有覆盖 equals()
和 hashcode()
。 HashSet 根据 equals 方法检查一个对象是否与另一个对象相等。此外,为了不进行多次比较,它将具有相同哈希码的对象分组在一起。
请注意,无论何时重写此方法,通常都需要重写 hashCode 方法,以维护 hashCode 方法的通用契约,即相等的对象必须具有相等的哈希码。
equals 和 hashcode 的生成版本:
public class A{
private int elem;
public A(int elem) {
this.elem = elem;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
A a = (A) o;
return elem == a.elem;
}
@Override
public int hashCode() {
return Objects.hash(elem);
}
}
关于java - 为什么我的 HashSet 中有重复数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58123436/