HashMap有两个重要的属性:size和load factor.我浏览了Java文档,它说的0.75f是初始加载因子.但我找不到它的实际用途.
有人可以描述我们需要设置负载因子的不同场景以及针对不同情况的一些样本理想值吗?
当大小超过最大阈值时,如何在散列映射或散列表中完成重新散列过程?
是否所有对都被复制到新的桶阵列?
编辑:
在重新散列之后,同一个桶(在链表中)中的元素会发生什么?我的意思是他们在重拍之后会留在同一个桶里吗?
我对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流程,如果使用此图表,请更好.