作者:洛熙难耐_467 | 来源:互联网 | 2023-02-01 12:22
我对Hashing和Rehashing有些困惑.以下是我的理解,请纠正我,如果我错了.
根据图片,bucket实际上是Entry类的数组,它以链表的形式存储元素.每个新的键值对,其键具有相同的条目数组桶的哈希码,将被存储为存储该哈希码元素的桶中的条目对象.如果密钥具有条目阵列桶中当前不存在的新哈希码,则将添加具有相应哈希码的新桶.
现在问题是,什么时候发生实际的重复?
情况1:假设我有一个入口数组,其中包含哈希码1,2 3的桶,当时Entry Array Bucket达到12就可以添加新元素,但是只要一个新元素的哈希码为13(假设我正在添加)在一系列哈希码1然后是2等系列元素中,将创建一个新的入口桶地图/数组(请说明哪一个),新容量将为32,现在Entry数组可以容纳不同的32个桶.
案例2:桶数量的问题,HashMap 16的默认容量意味着它可以存储16个元素,在单个桶中或者无论如何都是重要的.因为加载因子.75,一旦添加了第13个元素,就会创建一个新的桶数组,其中包含32个,即现在所有链接列表中的总Entry节点可以是32.
我认为案例2是正确的.请使用Re Hashing流程,如果使用此图表,请更好.
1> Eran..:
Rehashing增加了可用桶的数量,作为当前存储在其中的条目数的函数HashMap
.
当HashMap
实现确定应增加桶的数量以便维持预期的O(1)
查找和插入性能时,就会发生这种情况.
关于.75默认加载因子以及HashMap
在添加第13个条目时它将如何重新加载是正确的.
但是,这是不正确的default capacity of HashMap 16 means it can store 16 element in it
.任何桶都可以存储多个条目.但是,为了保持所需的性能,每个桶的平均条目数应该很小.这就是我们有负载因子的原因,也是我们应该使用一个合适的原因hashCode()
,使得尽可能均匀地分布密钥.