gpt4 book ai didi

java - HashSet:无法删除相等的对象?

转载 作者:行者123 更新时间:2023-11-29 09:43:39 25 4
gpt4 key购买 nike

在我的代码中,我试图删除 HashSet 中的一个元素。我已经覆盖了对象中的 equals 方法。

for (BitVector bv : implicantsToDeleteViaBitVector) {
System.out.println(bv + " , " + bv.hashCode());

for(BitVector bvSetbv : bvSet){
if(bv.equals(bvSetbv)){
System.out.println("match " + bv);
}else{
System.out.println("No match " + bv + "," + bvSetbv);
}
}

if(bvSet.remove(bv)){
System.out.println("Remove");
}else{
System.out.println("No match found by remove");
}
...

问题是我的 equals 方法将返回 true,但我的 remove 在被检查的同一项目上返回 false。这是 equals 方法:

@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof BitVector))
return false;
BitVector v = (BitVector) o;
boolean sameSize = mySize == v.getSize();
boolean sameTerms = this.bitVectorList
.containsAll(v.getBitVectorList());

return (sameSize && sameTerms);
}

remove 是否在类中使用 equals() 方法?如果是这样,那么为什么这段代码不起作用?

最佳答案

你说:

I have overridden the equals method in my object.

你还需要重写hashCode()方法,它的契约应该是如果两个对象相等,那么它们的hashCodes也必须相等,虽然反过来不一定成立两个对象可能并允许具有哈希码但不相等,尽管这是应该尽可能避免的事情。

关于java - HashSet:无法删除相等的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com