我正在尝试使用简单的java数组实现Simple Hash Table。但首先我需要以某种方式有一个关联数组或排序?简单的哈希表实现怎么样?它仍然可以在O(1)
答案 0 :(得分: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)
阅读有关数据结构和算法的任何教科书,或只阅读Wikipedia "Hash Table" entry
答案 2 :(得分:1)
JDK随附的实现非常适合自学(尽管我承认并非简约)。有一个look at it here。