为什么不允许外部接口为哈希映射提供哈希码/等于?
使用 a,提供自定义是微不足道的,因此覆盖了添加到映射中的对象提供的语义。然而,不能以这种方式控制;提供哈希值和相等性检查的函数不能“旁加载”。TreeMap
Comparator
Comparable
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) { ... }
}
不区分大小写的 Map
问题得到了一个微不足道的解决方案:
new HasharatorMap(String.CASE_INSENSITIVE_EQUALITY);
这是否可行,或者您能看到这种方法的任何根本问题吗?
该方法是否在任何现有的(非 JRE)库中使用?(试过谷歌,没有运气。
编辑:hazzen提出的不错的解决方法,但我担心这是我试图避免的解决方法...... ;)
编辑:更改标题不再提及“比较器”;我怀疑这有点令人困惑。
编辑:与性能相关的可接受答案;希望得到更具体的答案!
编辑:有一个实现;请参阅下面的可接受答案。
编辑:改写了第一句话,以更清楚地表明这是我所追求的旁加载(而不是排序;排序不属于HashMap)。