初始化 HashMap 的最佳方法

2024-05-10

我通常会这样做

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

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

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


Java 的好处在于它是开源的,因此您可以获取源代码 http://www.docjar.com/html/api/java/util/HashMap.java.html,它回答了一些问题:

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

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

  3. 如果没有使用构造函数指定,则映射的默认容量为 16。因此,当第 12 个元素添加到映射中时,映射的容量将加倍至 32。然后24日再次,依此类推。

  4. 是的,当容量增加时,需要分配新的内存。这是一个相当昂贵的操作(参见resize() and transfer()功能)。

与您的问题无关,但仍然值得注意,我建议声明/实例化您的地图,如下所示:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化 HashMap 的最佳方法 的相关文章

随机推荐