1

在一些帖子中,我读到:

ConcurrentHashMap 根据负载因子按邻近度对元素进行分组

  1. 这种分组是如何发生的?

  2. 假设我重写hashCode()了函数,使其始终返回 1。现在如何将更高更低的值loadfactor插入到 ConcurrentHashMap 中?

  3. 现在我重写hashCode()函数,以便它总是返回不同的哈希码。现在如何影响插入到 ConcurrentHashMap 中的更高更低loadfactor

4

1 回答 1

0

hashmap 本质上是一个列表数组。例如,假设给定的 hashmap 有一个包含 100 个列表的数组。当您向其中添加内容时,会为该对象计算 hashCode。然后该值的模数和列表的数量(在本例中为 100)用于确定将其添加到哪个列表。因此,如果您添加一个哈希码为 13 的对象,它会被添加到列表 13。如果您添加一个哈希码为 12303512 的对象,它会被添加到列表 12。

加载因子告诉 hashmap 何时增加列表的数量。它基于整个地图中的项目数和当前容量。

在哈希码始终返回 1 的第一个场景中,无论有多少列表,您的对象最终都会出现在同一个列表中(这很糟糕。)在第二种情况下,它们将在列表中更均匀地分布(这是好的。)

由于负载因子基于地图的整体大小而不是列表的整体大小,因此哈希码的质量并不真正与负载因子交互。在第一种情况下,它会像在第二种情况下一样增长,但无论如何,所有内容都将最终出现在同一个列表中。

于 2016-01-06T17:47:11.330 回答