Java:需要一个哈希映射,其中一个提供函数来进行散列

mP.*_*mP. 14 java

我想知道一个像常规HashMap/Hashtable一样工作的Map,除了它需要一个函数来返回哈希码并执行相等测试,而不是让HashMap使用Object.hashCode/equals.

我不能使用TreeMap,因为对象没有实现Comparable,并且没有稳定的方法来处理不等对象的情况.无法使用System.identityHashCode,因为对于不相等的对象可能会发生冲突.

理想情况下,如果Map以类似的方式获取函数,可以将自定义Comparator提供给TreeMap而不是让TreeMap将参数转换为Comparable,那将是很好的.

解决这个问题的唯一方法是包装每个密钥并让包装器执行自定义哈希/等于但是肯定会有更好的方法.

Joc*_*fer 9

您是否考虑过想要缓存的对象的简单包装?

class Wrapper {
   YourObject object;

   public boolean equals(Object someOther) {
   ...
   }
   public int hashCode() {
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以更进一步地使用此解决方案并编写一个简单的 Map 包装器,而不是在内部使用此散列包装器。地图包装器可以在添加或检索对象时处理对象的包装和向上包装。 (2认同)