如果我有一个HashMap/Hashtable和我插入钥匙:c
值:14
HashMap/HashTable - 将冲突添加到桶的结尾还是开始或结束?
[0] -> NULL
[1] -> NULL
[2] -> NULL
[3] -> NULL
[4] -> NULL
[5] -> NULL
[6] -> NULL
[7] -> NULL
[8] -> NULL
[9] -> (c/14) -> NULL
[0] -> NULL
[1] -> NULL
[2] -> NULL
[3] -> NULL
[4] -> NULL
[5] -> NULL
比方说,我将钥匙:z
值:6
和散列和模量有它的土地上的索引9
。
我的问题是:我插入单链表(即(c/14) -> (z/6) -> NULL
)的末尾还是在LinkedList的前面。
如果我在每个桶的前端插入新的冲突,那么我不需要遍历整个LinkedList链。这使得插入O(1)
,因为无论存储桶有多大,我都不需要遍历所有元素。
如果我在每个桶的末端插入新的碰撞,我必须遍历整个单个列表直到达到最后一个元素。然后我追加最后一个元素。
无论我选择哪一个,从列表中检索将是相同的。我可能仍然需要遍历存储桶中的所有节点。除非您认为用户更有可能在之前添加的key
上致电get()
。
尽管如此,我看到HashTable和HashMap的所有示例和实现都将元素添加到存储区末尾。为什么?
哦等待你是对的,你必须在最后插入,因为只有在循环到最后才能确定是否有重复元素。如果您在前面插入,可能会意外插入重复。非常感谢。 – Hatefiend
如果需要,您也可以在扫描完列表后插入。编码可能会更容易一些。 :-) – templatetypedef
是的,我猜是的。不管怎样,谢谢你明确表示。简直不敢相信我没有意识到 – Hatefiend