如果您在Java中创建一个通用哈希表(假设它还没有),那么您将如何实现其默认哈希函数?我知道你可以传入一个(通过接口),但大多数数据结构都有默认值。
我的尝试:
由于Java泛型需要引用类型,并且Java中的所有引用类型都实现了hashCode(),我认为您可以使用T.hashCode() % backingArraySize
作为哈希函数,这就足够了。毕竟,您可以存储在哈希表中的任何类型的实现者都应该为其类型提供适当的hashCode()函数,对吗?
有更好的方法吗?
答案 0 :(得分:1)
在我的哈希表实现中,当算法不是primary clustering和hashCode() % backingArraySize
的主题时,我决定使用普通hashCode() * 2654435761
(即你的建议)(常量取自{{ 3}})当它是,我。即用于线性哈希实现。原因是许多默认hashCode()
实现不会在整个int
范围内分配值(所有数字盒装类型,String
,List
),并且当密钥为某种程度上偏向的线性散列可能会受到主要聚类的影响。