Comparable
을 구현하고 Object.equals를 오버라이드하는 정적 중첩 클래스를 만들었습니다. 따라서 e1.compareTo(e2)==0
및 e1.equals(e2)==true
은 동의어가 아닙니다.동일 요소 및 트리 집합
그런 다음 add 메서드를 사용하여 각각 TreeSet
및 HashSet
에 개체를 추가합니다.
HashSet
에 삽입하면서 실패합니다
TreeSet
에 여러 개의 같은 객체를 삽입 찾을 것입니다 성공. 위의 프로그램의
public class Test {
/*
* This inner class deliberately has a compareTo method that is not
* consistent with equals
*/
static class TestObject implements Comparable<TestObject> {
@Override
public int compareTo(TestObject arg0) {
// No two of these objects can be ordered
return 0;
}
@Override
public boolean equals(Object arg0) {
// No two of these objects are ever equal to each other
return false;
}
}
public static void printSuccess(boolean success) {
if (success)
System.out.println(" Success");
else
System.out.println(" Failure");
}
public static void main(String[] args) {
TreeSet<TestObject> testTreeSet = new TreeSet<TestObject>();
HashSet<TestObject> testHashSet = new HashSet<TestObject>();
System.out.println("Adding to the HashSet:");
printSuccess(testHashSet.add(new TestObject()));
printSuccess(testHashSet.add(new TestObject()));
printSuccess(testHashSet.add(new TestObject()));
System.out.println("Copying to the TreeSet:");
for (TestObject to : testHashSet) {
printSuccess(testTreeSet.add(to));
}
}
}
출력 트리 세트는 다음과 같이 행동하는 이유
Adding to the HashSet:
Success
Success
Success
Copying to the TreeSet:
Success
Failure
Failure
은 어떤 하나 말해 줄 수 있습니까?
아마도 'hashCode'는 같습니까? 상어 @ – Shark
- 해시 세트는 모든 오브젝트 –
추가된다 (https://docs.oracle.com/javase/7/docs/api/java [A TreeSet의 인스턴스 (또는 비교)은 compareTo 메쏘드를 사용하는 모든 요소 비교를 수행한다] /util/TreeSet.html) –