java - 从头开始创建哈希表?

标签 java hashtable

<分区>

我正在编写一个程序,用于对文档中的单词及其使用频率和行号进行哈希处理。当我被告知您必须从头开始创建哈希表时,我以为我已经完成了。我不知道从哪里开始。任何关于从哪里开始以及如何开始的建议都将不胜感激。

最佳答案

哈希表是一种重要的基础数据结构。您可以在 Wikipedia's Hash table article 阅读更多相关信息。 .幸运的是,它们相当容易实现。

基本上,哈希表是一种数据结构,它接受一个键并返回或存储该键的值。

在它们的核心,它们通常使用数组实现,我们称之为arr,这样键值对存储在arr[key.hashCode()%arr.length ]。请注意,由于您的数组不是无限长的,并且 hashCode 不能保证产生唯一值,您最终会得到映射到数组相同索引的键。这称为碰撞

解决这些冲突的一种方法是为 arr 的每个成员存储一个链表。然后 arr 的定义看起来像这样

LinkedList<Object> arr[];

所有映射到 arr[key.hashCode()%arr.length] 的对象都将被添加到该位置的列表中。当你想从哈希表中检索一个对象时,跳转到在 arr[key.hashCode()%arr.length] 处找到的链表并遍历链表的每个成员,直到找到一个键为 .equals.

的键值对

一个好的哈希表实现可能会在它变得太满时做一些事情,比如调整 arr 的大小。

关于java - 从头开始创建哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7919532/

相关文章:

javascript - 如何在Retrofit中插入值?

c# - 从哈希表中读取匹配的记录到类对象中

c - 在链接列表中插入和删除

java - 我有包含 String[] 的 ArrayList,如果我将新的 string[] 添加到列表中,它还会修改之前添加的 string [] 对象

java - 如何使用 Jackson 从 JSON 文件加载多个 HashMap

java - 让 Sprite 像时钟指针一样旋转?

JAVA NIO观察者: How to detect end of a long lasting (copy) operation?

hashmap - Arduino 哈希表/字典

C# - 将 json 格式的数据解析为嵌套的哈希表

algorithm - 在使用线性探测构建散列表以解决冲突时,额外项是始终添加到散列中还是仅在发生冲突时添加?