С TreeMap
тривиально предоставить пользовательский Comparator
, тем самым переопределяя семантику, предоставляемую Comparable
объектами, добавленными на карту. HashMap
s не может управляться таким образом; функции, предоставляющие хэш-значения и проверки равенства, не могут быть «загружены боковыми».Почему бы не позволить внешнему интерфейсу предоставлять hashCode/equals для HashMap?
Я подозреваю, что было бы легко и полезно разработать интерфейс и модифицировать его в HashMap
(или новый класс)? Нечто подобное, только с лучшими именами:
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
проблема приобретает тривиальное решение:
new HasharatorMap(String.CASE_INSENSITIVE_EQUALITY);
Будет ли это выполнимо, или вы можете увидеть какие-либо фундаментальные проблемы с этим подходом?
Этот подход используется в любых существующих (не JRE) libs? (. Пробовал Google, не повезло)
EDIT: Хороший обходной путь, представленный hazzen, но я боюсь, что это временное решение, я стараюсь избегать ...;)
EDIT: не изменен заголовок не больше упоминать «Компаратор»; Я подозреваю, что это было немного запутанно.
РЕДАКТИРОВАТЬ: Принят ответ в связи с производительностью; любил бы более конкретный ответ!
EDIT: Существует реализация; см. принятый ответ ниже.
РЕДАКТИРОВАТЬ: перефразируйте первое предложение, чтобы более четко указать, что это боковая загрузка, с которой я столкнулся (и не заказываю, заказ не принадлежит HashMap).
«Этот класс не дает никаких гарантий относительно порядка карты, в частности, он не гарантирует, что заказ будет оставаться постоянным с течением времени». - Javadocs от HashMap. Другими словами, HashMap не упорядочен. – Powerlord 2009-12-09 20:55:22
Этот оператор позволяет использовать любую реализацию hashCode, а также позволяет Карте изменять размеры по мере ее появления. Так что это особенность, а не проблема в этом контексте? – volley 2009-12-09 21:01:09