如何实现一个简单的哈希表(例如,只使用数组)

3

可能是重复问题:
哈希表的基础知识是什么?

我正在尝试使用简单的Java数组实现一个简单的哈希表。但首先,我需要有某种类型的关联数组?一个简单的哈希表实现应该是什么样子的?它仍然应该能够在O(1)时间内进行添加/删除/获取操作。

3个回答

5
哈希表基本上是采用一个输入键,通过哈希函数计算出桶ID,然后使用该桶ID来存储或检索与该键相关联的数据。
换句话说,对于您的情况,您只需在数据上提供一个哈希函数,以便为您的数组索引提供一个桶ID。可能最简单(也是最天真)的方法是将您的密钥的所有字符进行异或操作,然后进行模运算来将其带到所需范围内。例如,假设您有一个包含以下内容的结构:
姓名 地址 电话 所有种类的其他细节
您可以生成如下哈希:
set hashval to zero
for each character in Name:
    hashval = hashval xor character
hashval = hashval mod 256

这将为您提供0到255之间(含)的桶ID。
请记住,桶可能包含多个项目,因此您不能仅使用桶ID作为数组索引。每个桶都需要是一个包含可能有多个项目的结构(例如链接列表或甚至另一个哈希表)。

1

1

自带的 JDK 实现对于自学来说相当不错(虽然我承认不是最小化的)。在这里查看它


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接