TreeSet
콜렉션 및 hashCode
메소드에 대한 빠른 질문이 있습니다. 개체를 추가하기 전에 TreeSet
이 있고 여기에 개체를 추가하려고합니다. contains
메서드를 사용하여 TreeSet
에 있는지 확인합니다.Java - TreeSet 및 hashCode()
나는 hashCode 메소드의 내 구현을 사용하여 별개의 해시 코드, 아래의 예를 생산하고 각각이 별개의 개체가 :
public int hashCode()
{
int hash = 7;
hash = hash * 31 + anAttribute.hashCode();
hash = hash * 31 + anotherAttribute.hashCode();
hash = hash * 31 + yetAnotherAttribute.hashCode();
return hash;
}
특정 실행에 대한 해시 코드
입니다 : 76126352과 76126353 (객체 만 하나의 속성에서 한 자리수만큼 다릅니다).
hashCodes가 다르더라도 contains 메소드는 이러한 객체에 대해 true를 반환합니다. 어떤 아이디어? 이것은 정말로 혼란스럽고 도움이 될 것입니다. 자바 doc로부터
또한 equals 메서드를 사용하므로 equals와 Comparator/compareTo가 일관성을 유지하는 것이 중요합니다. –
javadocs에 따르면 그렇지 않습니다. – sepp2k
"이것은 Set 인터페이스가 equals 연산으로 정의 되었기 때문에 TreeSet 인스턴스가 compareTo (또는 compare) 메소드를 사용하여 모든 요소 비교를 수행하기 때문에 가능합니다."(http://java.sun.com/ javase/6/docs/api/java/util/TreeSet.html) – Dirk