KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
With a TreeMap it's trivial to provide a custom Comparator , thus overriding the semantics provided by Comparable objects added to the map. HashMap s however cannot be controlled in this manner; the functions providing hash values and equality checks cannot be 'side-loaded'. I suspect it would be both easy and useful to design an interface and to retrofit this into HashMap (or a new class)? Something like this, except with better names: 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) { ... } } The case insensitive Map problem gets a trivial solution: new HasharatorMap(String.CASE_INSENSITIVE_EQUALITY); Would this be doable, or can you see any fundamental problems with this approach? Is the approach used in any existing (non-JRE) libs? (Tried google, no luck.) EDIT: Nice workaround presented by hazzen, but I'm afraid this is the workaround I'm trying to avoid... ;) EDIT: Changed title to no longer mention "Comparator"; I suspect this was a bit confusing. EDIT: Accepted answer with relation to performance; would love a more specific answer! EDIT: There is an implementation; see the accepted answer below. EDIT: Rephrased the first sentence to indicate more clearly that it's the side-loading I'm after (and not ordering; ordering does not belong in HashMap).
Tags (comma-separated)
Save Edits
Cancel