当哈希表生成巨大的哈希码时会发生什么?

时间:2014-07-29 19:33:31

标签: java arrays hashmap hashtable

我对hashmaps / hashtables有点困惑,因为我看的每一个地方,我都没有得到我正在寻找的答案。我仍然不知道hashmaps是使用静态数组还是使用动态查找。这就是我认为首先存储哈希图的方式:

[Bucket 0] Object 1
[Bucket 4] Object 2
[Bucket 8000] Object 3

我认为如果你想从桶8000中获取值,你必须在它之前搜索每个桶密钥,直到你达到8000.现在在阅读并观看一些视频之后我认为它存储为基本数组,如: / p>

[Bucket 0] Object 1
[...3 buckets in between]
[Bucket 4] Object 2
[...7795 buckets in between]
[Bucket 8000] Object 2

但是当某些东西产生巨大的哈希码时,就会浪费大量的内存。然后某处了解到它可能使用%运算符来阻止它们使用索引太大,但随后每个存储桶更容易发生冲突。那是哪个呢?我认为最明智的一个是第一个想法,但我不确定。感谢。

1 个答案:

答案 0 :(得分:1)

以数组长度为模式获取哈希码以生成入站索引(HashMap,特别是首先将二级哈希函数应用于给定的哈希代码,以防止编写糟糕的哈希函数)。如果哈希表开始填满超过某个阈值,则扩展该数组并重新插入所有元素。碰撞 是可能的,但是如果它们具有良好的散列函数,则应该很少。