<分区>
我正在编写一个程序,用于对文档中的单词及其使用频率和行号进行哈希处理。当我被告知您必须从头开始创建哈希表时,我以为我已经完成了。我不知道从哪里开始。任何关于从哪里开始以及如何开始的建议都将不胜感激。
<分区>
我正在编写一个程序,用于对文档中的单词及其使用频率和行号进行哈希处理。当我被告知您必须从头开始创建哈希表时,我以为我已经完成了。我不知道从哪里开始。任何关于从哪里开始以及如何开始的建议都将不胜感激。
最佳答案
哈希表是一种重要的基础数据结构。您可以在 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/