gpt4 book ai didi

java - 初始化 HashMap 的最佳方式

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

我通常这样做,例如

HashMap<String,String> dictionary = new HashMap<String,String>();

我开始考虑它,据我所知,HashMap 是通过哈希表在后台实现的。
对象存储在表中,使用散列来查找它们应该存储在表中的位置。

我没有为 dictionary 的构造设置大小是否会降低性能?
IE。构造期间哈希表的大小是多少?随着元素的增加,是否需要为表分配新的内存?
或者我对这里的概念感到困惑?
默认容量和负载是否足够,或者我应该花时间了解实际数字?

最佳答案

Java 的优点在于它是开源的,因此您可以打开 source code ,它回答了一些问题:

  1. 不,HashMap之间没有关系和 HashTable . HashMap源自 AbstractMap , 并且不在内部使用 HashTable用于管理数据。

  2. 省略显式大小是否会降低性能将取决于您的使用模型(或者更具体地说,您在 map 中放入了多少东西)。每次达到某个阈值 (0.75 * <current map capacity> ) 时, map 的大小都会自动加倍,加倍操作的代价很高。因此,如果您知道大约有多少元素将进入 map ,您可以指定一个大小并防止它永远需要分配额外的空间。

  3. map 的默认容量(如果未使用构造函数指定)为 16。因此,当第 12 个元素添加到 map 时,它的容量将翻倍至 32。然后在 24 日再次出现,以此类推。

  4. 是的,当容量增加时需要分配新的内存。而且这是一项相当昂贵的操作(请参阅 resize()transfer() 函数)。

与您的问题无关但仍值得注意的是,我建议像这样声明/实例化您的 map :

Map<String,String> dictionary = new HashMap<String,String>();

...当然,如果您碰巧知道 map 中将放置多少元素,您也应该指定。

关于java - 初始化 HashMap 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7544691/

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