gpt4 book ai didi

Java 哈希码和桶大小 - 关系

转载 作者:行者123 更新时间:2023-11-29 03:36:51 24 4
gpt4 key购买 nike

Java 哈希码是一个整数(大小为 2 pow 32)

当我们创建哈希表/ HashMap 时,它会创建大小等于 map 初始容量的桶。换句话说,它创建了一个大小为“初始容量”的数组

问题1. 它如何将键(java 对象)的哈希码映射到桶索引?2、既然hashmap的size是可以增长的,那么hashmap的size可以等于2 pow 32吗?如果答案是肯定的,那么拥有一个大小为 2 pow 32 的数组是明智的吗?

最佳答案

这是当前源代码的链接:http://www.docjar.com/html/api/java/util/HashMap.java.html

您问题的答案(部分)是特定于实现的。

1) 查看代码。请注意,您关于 initialCapacity 实现方式的假设是不正确的……至少对于 Oracle Java 6 和 7。具体来说,initialCapacity 不一定是 hashmap 的数组大小。

2) HashMap的大小就是条目的个数,可以超过2^32!我假设您实际上是在谈论容量。 HashMap 数组的大小理论上限制为 2^31 - 1(Java 数组的最大大小)。对于当前的实现,MAX_CAPACITY 实际上是 2^30;看代码。

3) “...拥有一个大小为 2^32 的数组是明智的吗?” 目前定义的 Java 是不可能的,它是尝试做不可能的事情是不明智的。

如果您真的要问 Java 中哈希表数据结构的设计,那么在正常大小的哈希表和巨大的哈希表的效率之间存在权衡;即包含明显超过 2^30 元素的 map 。 HashMap 实现被调整为最适合正常大小的 map 。如果您经常需要处理巨大的 map ,并且性能至关重要,那么您应该寻求实现一个根据您的特定要求进行调整的自定义 map 类。

关于Java 哈希码和桶大小 - 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036327/

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