Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java哈希代码和bucket大小-关系_Java_Data Structures_Hash_Hashmap - Fatal编程技术网

Java哈希代码和bucket大小-关系

Java哈希代码和bucket大小-关系,java,data-structures,hash,hashmap,Java,Data Structures,Hash,Hashmap,Java hashcode是一个整数,大小为2 pow 32 当我们创建一个hashtable/hashmap时,它会创建大小等于Map初始容量的bucket。换句话说,它创建一个大小为初始容量的数组 问题: 1.它如何将关键java对象的哈希代码映射到bucket索引? 2.既然hashmap的大小可以增长,hashmap的大小可以等于2 pow 32吗?如果答案是肯定的,那么使用大小为2 pow 32的数组是明智的。Java数组的大小实际上限制为Integer.MAX_VALUE元素,2^3

Java hashcode是一个整数,大小为2 pow 32

当我们创建一个hashtable/hashmap时,它会创建大小等于Map初始容量的bucket。换句话说,它创建一个大小为初始容量的数组

问题: 1.它如何将关键java对象的哈希代码映射到bucket索引?
2.既然hashmap的大小可以增长,hashmap的大小可以等于2 pow 32吗?如果答案是肯定的,那么使用大小为2 pow 32的数组是明智的。

Java数组的大小实际上限制为Integer.MAX_VALUE元素,2^31-1

HashMap使用两个数组大小的幂,所以它可能使用的最大值是2^31。您需要一个大的物理内存才能使其合理


HashMap执行一系列移位和异或操作,以减少一些冲突源,然后再执行简单的按位操作并获取bucket索引。

Java数组的大小实际上限制为Integer.MAX_VALUE元素,2^31-1

HashMap使用两个数组大小的幂,所以它可能使用的最大值是2^31。您需要一个大的物理内存才能使其合理


HashMap执行一系列移位和异或操作,以减少一些冲突源,然后再执行简单的按位操作并获取bucket索引。

以下是指向当前源代码的链接:

您的问题的答案部分取决于具体的实现

我看代码。请注意,您关于如何实现initialCapacity的假设是不正确的。。。至少适用于Oracle Java 6和7。具体来说,initialCapacity不一定是hashmap的数组大小

2 HashMap的大小是条目数,可以超过2^32!我想你说的是容量。HashMap数组的大小理论上限制为2^31-1,这是Java数组的最大大小。对于当前的实现,最大容量实际上是2^30;请参阅代码

3。。。使用大小为2^32的数组是明智的吗?按照目前的定义,用Java是不可能的,尝试做一些不可能的事情是不明智的


如果您真的想了解Java中哈希表数据结构的设计,那么在正常大小的哈希表和庞大的哈希表的效率之间需要权衡;i、 e.元素明显多于2^30的地图。HashMap实现经过调优,最适合正常大小的映射。如果您经常需要处理大型映射,并且性能非常关键,那么您应该考虑实现一个定制的映射类,该类可以根据您的特定需求进行调整。

以下是当前源代码的链接:

您的问题的答案部分取决于具体的实现

我看代码。请注意,您关于如何实现initialCapacity的假设是不正确的。。。至少适用于Oracle Java 6和7。具体来说,initialCapacity不一定是hashmap的数组大小

2 HashMap的大小是条目数,可以超过2^32!我想你说的是容量。HashMap数组的大小理论上限制为2^31-1,这是Java数组的最大大小。对于当前的实现,最大容量实际上是2^30;请参阅代码

3。。。使用大小为2^32的数组是明智的吗?按照目前的定义,用Java是不可能的,尝试做一些不可能的事情是不明智的


如果您真的想了解Java中哈希表数据结构的设计,那么在正常大小的哈希表和庞大的哈希表的效率之间需要权衡;i、 e.元素明显多于2^30的地图。HashMap实现经过调优,最适合正常大小的映射。如果您经常需要处理大型映射,并且性能非常关键,那么您应该考虑实现一个定制的映射类,该类可以根据您的特定需求进行调整。

查看java HashMap类源代码。您将得到答案。请查看java HashMap类源代码。你会得到答案。这是否意味着一个bucket只会有一个hashcode映射到它,并且只有当两个对象获得相同的hashcode并因此映射到同一个bucket时才会发生冲突?这是否意味着一个bucket只会有一个hashcode映射到它,并且只有当两个对象获得相同的hashcode并因此映射到同一个bucket时才会发生冲突同一桶?