如果您要在 Java 中创建一个通用哈希表(假设它还没有),那么您将如何实现其默认哈希函数?我知道您可以(通过接口(interface))传入一个,但大多数数据结构都有默认值。
我的尝试:
由于 Java 泛型需要引用类型,并且 Java 中的所有引用类型都实现 hashCode(),因此我认为您可以仅使用 T.hashCode() % backingArraySize
作为哈希函数,这就足够了。毕竟,您可能存储在哈希表中的任何类型的实现者都应该为其类型提供适当的 hashCode() 函数,对吗?
有更好的方法吗?
最佳答案
在我的哈希表实现中,当算法不是 primary clustering 的主题时,我决定使用普通的 hashCode() % backingArraySize
(即您的建议)。和 hashCode() * 2654435761
(常量取自 this answer )。 e.用于线性哈希实现。原因是许多默认的 hashCode()
实现无法在整个 int
范围内很好地分配值(所有数字装箱类型、String
、List
),并且当键以某种方式有偏差时,线性散列可能会受到主集群的影响。
关于java - 用于在 Java 中创建通用哈希表的哈希函数(用于学习目的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23873527/