2012-12-03 5 views
1

가장 일반적인 Java 콜렉션의 다양한 메소드, 조작 및 전제 조건을 탐구 중이며 조금 혼란 스럽습니다. 누군가가 다음 항목을 명확히 수 있다면 나는 매우 감사하게 될 것입니다 :TreeMap/TreeSet의 요구 사항

1) 방법 equals과의 구현인가를 hashCode 절대적으로 TreeSet하고 HashMap에 같은 TreeMap가 제대로 작동하기 위해서는 필요? 이전 방법을 구현하지 않은 경우 잠재적으로 어떤 영향이 있습니까? 나는 현재 TreeMap과 TreeSet (사용자 정의 클래스 객체)을 사용하고 있으며, 지금까지는 Comparable 및 그 메소드 compareTo을 구현하여 equalshashCode을 구현함으로써 지금까지 제대로 작동합니다.

2) 클래스 equals, hashCode 또는 인터페이스에 Comparable impelmenting 때 모든 유도 된 클래스를 정의하고 새로운 implementantion없이 이러한 방법에있어서, 수집 제대로 작동하는 것은 충분? 주어진 메소드가 파생 클래스에 속해 있기 때문에 나는 전자가 옳다는 인상을 가지고있다. 마침내 사실입니까?

+0

설정이 맵과 다르므로이 질문을 두 개의 질문으로 나누면 좋을 것 같습니다. – kosa

답변

2

HashMap과 같이 TreeSet과 TreeMap이 제대로 작동하려면 equals와 hashCode가 반드시 필요합니까?

no.

이전 방법을 구현하지 않았을 때의 잠재적 영향은 무엇입니까?

없음.

equel, hashCode 또는 심지어 Comparable 인터페이스에서 임베 팅할 때 모든 파생 클래스가 새로운 정의 및 구현없이 해당 메소드에 따라 올바르게 작동하면 충분합니까?

예, "제대로 작동합니다"는 소리가 나는 것처럼 간단하지 않습니다. 일반적으로 키 또는 요소를 모두 동일한 유형으로 지정해야합니다. 그들의 유형을 혼합하는 것은 거의 좋은 생각이 아닙니다.

TreeMap 및 TreeSet의 경우 Comparable + compareTo 또는 Comparator + compare를 구현하기 만하면됩니다.