java - 用于在 Java 中创建通用哈希表的哈希函数(用于学习目的)

标签 java data-structures hash hashtable

如果您要在 Java 中创建一个通用哈希表(假设它还没有),那么您将如何实现其默认哈希函数?我知道您可以(通过接口(interface))传入一个,但大多数数据结构都有默认值。

我的尝试:

由于 Java 泛型需要引用类型,并且 Java 中的所有引用类型都实现 hashCode(),因此我认为您可以仅使用 T.hashCode() % backingArraySize 作为哈希函数,这就足够了。毕竟,您可能存储在哈希表中的任何类型的实现者都应该为其类型提供适当的 hashCode() 函数,对吗?

有更好的方法吗?

最佳答案

在我的哈希表实现中,当算法不是 primary clustering 的主题时,我决定使用普通的 hashCode() % backingArraySize (即您的建议)。和 hashCode() * 2654435761 (常量取自 this answer )。 e.用于线性哈希实现。原因是许多默认的 hashCode() 实现无法在整个 int 范围内很好地分配值(所有数字装箱类型、StringList),并且当键以某种方式有偏差时,线性散列可能会受到主集群的影响。

关于java - 用于在 Java 中创建通用哈希表的哈希函数(用于学习目的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23873527/

相关文章:

mysql - 在关系数据库中构建搜索索引的策略

php - 一个字符串的 md5 散列可以在一个地方与另一个地方不同吗?

android - Alias Key with space like (my name) insted of (my_name) 在生成释放 key 哈希时导致错误

java - 不能是@Required 或@NotNull

java - 如何在 AWS S3 Java API 中指定区域名称?

java - 需要一些关于 java.util.list 的说明

c++ - 在 OpenGL 中制作一个简单的形状移动(形状在数据结构中)

c - 关于 char 数组结构的问题

ruby - 为什么我们可以在 block 中使用数组索引来在ruby中进行哈希排序?

java - 如何从一个非常大的 JSON 数组中获取数据?