在我的代碼中,我試圖刪除HashSet中的元素。我已經覆蓋了我的對象中的equals方法。HashSet:無法刪除一個對等的對象?
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,以檢查相同的項目。這是等於方法:
@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);
}
是否刪除在類中使用equals()方法?如果是這樣,那麼爲什麼這個代碼不工作?
我在的hashCode了一下和散列碼似乎是相等。然而,刪除仍然是錯誤的。 – Faytll 2014-11-20 19:40:36
@Faytll:那麼你會想要考慮創建併發佈一個[最小,完整和可驗證的示例程序](http://stackoverflow.com/help/mcve),您可以將代碼壓縮到最小的位,然後編譯並且運行,沒有外部依賴(例如需要鏈接到數據庫或圖像),沒有額外的代碼與您的問題無關,但仍顯示您的問題。 – 2014-11-20 19:41:34