我正在尝试在Java中操作HashSet。我看到,通常情况下,HashSet中没有重复项吗?
这是我的代码
public class A{
private int elem;
public A(int elem) {
this.elem = elem;
}
}
在另一堂课
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方法的常规约定,该约定规定相等的对象必须具有相等的哈希码。
等于和哈希码的生成版本:
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);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句