내 코드에서 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를 반환하지만 내 제거는 검사중인 동일한 항목에서 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);
}
클래스에서 equals() 메서드를 사용합니까? 그렇다면이 코드가 작동하지 않는 이유는 무엇입니까?
나는 해시 코드를 한 번 봐 가지고 가고 해시 코드뿐만 아니라 동일한 것으로 보인다 수정할 수 있습니다. 아직 제거는 거짓으로 돌아옵니다. – Faytll
@Faytll : 그렇다면 컴파일 할 수있는 가장 작은 비트로 코드를 압축하는 [Minimal, Complete, Verifiable Example Program] (http://stackoverflow.com/help/mcve)을 만들고 게시하는 것이 좋습니다. (데이터베이스 또는 이미지에 연결해야하는 등) 외부 종속성이없고, 문제와 관련이없는 추가 코드가 없지만 여전히 문제를 보여줍니다. –