TreeMap
을 사용하면 Comparator
사용자 지정을 제공하는 것이 간단하므로 Comparable
개체가지도에 추가 된 의미를 재정의 할 수 있습니다. 그러나 HashMap
s는이 방식으로 제어 할 수 없습니다. 해시 값과 평등 검사를 제공하는 함수는 '횡'로드 될 수 없습니다.왜 외부 인터페이스가 HashMap에 hashCode/equals를 제공하도록 허용하지 않습니까?
인터페이스를 디자인하고 이것을 HashMap
(또는 새 클래스)에 개조하는 것이 쉽고 유용 할 것으로 생각됩니다. 더 좋은 이름을 제외하고 이런 식으로 뭔가 :
new HasharatorMap(String.CASE_INSENSITIVE_EQUALITY);
이이 행할 수 있을까, 또는 당신이이 방법에 근본적인 문제를 볼 수 있습니다
interface Hasharator<T> {
int alternativeHashCode(T t);
boolean alternativeEquals(T t1, T t2);
}
class HasharatorMap<K, V> {
HasharatorMap(Hasharator<? super K> hasharator) { ... }
}
class HasharatorSet<T> {
HasharatorSet(Hasharator<? super T> hasharator) { ... }
}
case insensitive Map
문제는 사소한 솔루션을 얻는다?
기존 (비 JRE) 라이브러리에서 접근법이 사용됩니까? no로 제목을 변경하지 :;
EDIT (. 구글, 행운을 시도))
편집을 hazzen 제시 니스 해결 방법을하지만 난 두려워 이것은 내가 ... 피하기 위해 노력하고있어 해결 방법은 더 긴 언급 "비교 자"; 나는 이것이 약간 혼란 스럽다고 생각한다.
편집 : 성능과 관련된 대답을 수락했습니다. 더 구체적인 답변을 사랑합니다!
편집 : 구현이 있습니다. 아래의 대답을 참조하십시오.
EDIT : 첫 번째 문장을 다시 말하면 내가 쓴 사이드 로딩임을 명확하게 나타내 었으며 (주문하지 않고 주문은 HashMap에 속하지 않음).
"이 클래스는지도의 순서를 보장하지 않으며 특히 시간이 지남에 따라 순서가 일정하게 유지된다는 것을 보장하지 않습니다." - HashMap의 Javadocs입니다. 즉, HashMap은 주문되지 않습니다. – Powerlord
이 명령문을 사용하면 모든 해시 코드 구현을 사용할 수 있으며 맵 자체의 크기를 조정할 수 있습니다. 그래서 이것은 특징이며이 맥락에서 문제가되지 않습니까? – volley