gpt4 book ai didi

java - 关于HashMap的一些疑惑

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:40 25 4
gpt4 key购买 nike

HashMap 的实现方式非常简单,但需要天才才能理解它的实现方式。所以,我在 java 文档中阅读了关于 HashMap 的内容。我有一些关于 HashMap 的小问题:

  1. 我知道 HashMap 的默认容量是 16。在 java 文档中,他们给出了默认初始容量 - 必须是 2 的幂。。这背后有什么具体原因吗?
  2. 我知道一点 HashMap 是如何在 HashCode、Bucket 和 LinkedList 的基础上工作的,如果我没记错的话。那么 HashMap 的大小是如何增加的。我的意思是如何管理存储桶大小和 LinkedList 大小。
  3. 这可能是个愚蠢的问题。当我们在 HashMap 中添加新元素时,它基于 HashCode 直接访问特定的桶,而不像在 LinkedList 中那样移动。我对吗?另一件事是它在头部而不是尾部添加元素。这是什么原因。 LinkedList 头部添加的新元素是否出现在桶内以避免尾部遍历。我的想法正确吗?

最佳答案

  1. 使用二的幂简化了实现并提高了性能。
    例如。要从哈希码中找到一个桶,它可以使用 hash & (SIZE -1) 而不是 abs(hash) % SIZE

  2. 除非您知道 HashMap 的确切工作原理,否则您将无法回答这个问题。如果 Map 的大小超过由负载因子定义的给定阈值,例如如果加载因子为 0.75,它将在 map 填充到 75% 时重新调整 map 大小。与 ArrayList 等其他集合类类似,Java HashMap 通过创建一个大小是 HashMap 先前大小两倍的新桶数组来重新调整自身大小,然后开始将每个旧元素放入新的桶数组中。此过程称为重新散列,因为它还应用散列函数来查找新的存储桶位置。

  3. 我们将每个新元素存储在链表的头部以避免尾部遍历,因此在调整链表中整个对象序列的大小时会反转,在此期间有可能出现无限循环。

在这里阅读更多:

关于java - 关于HashMap的一些疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20118225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com