Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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 为什么hashcode()返回一个整数而不是长?_Java_Arrays_Performance_Hashcode_Bucket - Fatal编程技术网

Java 为什么hashcode()返回一个整数而不是长?

Java 为什么hashcode()返回一个整数而不是长?,java,arrays,performance,hashcode,bucket,Java,Arrays,Performance,Hashcode,Bucket,在java中,hashcode()方法返回整数而不是long。有什么具体原因吗 好的,一个很好的原因是基于hashCode的数据结构(HashSet,HashMap)使用数组来存储bin,并且数组仅限于int索引。如果必须将longhashCode()映射到int数组索引,则通过long将一无所获。使用hashCode将有N个bucket,其中hashCode%N确定元素的bucket,希望为1(没有冲突的hashCode) 对于N,对于散列码,int就足够了;事实上,一个人需要在较低的位置有最

在java中,hashcode()方法返回整数而不是long。有什么具体原因吗

好的,一个很好的原因是基于
hashCode
的数据结构(
HashSet
HashMap
)使用数组来存储bin,并且数组仅限于
int
索引。如果必须将
long
hashCode()
映射到
int
数组索引,则通过
long将一无所获。

使用hashCode将有N个bucket,其中hashCode%N确定元素的bucket,希望为1(没有冲突的hashCode)

对于N,对于散列码,int就足够了;事实上,一个人需要在较低的位置有最多的变化;在不使用高位的情况下使用long(当N是2的幂时),将适得其反


当然,速度也是一个要求:int在最终的CPU上稍微好一点。

产生长CPU的优势是什么?您的哈希表不会包含超过20亿个桶。@khelwood类似的内容我可能在10年前写过。。。。猜猜看:有人告诉我,该公司的表中有数千亿项(显然不是JDK HashMap)。是的,但多年以来,这对于一些需要自定义大型映射(显然使用多个数组或堆外映射)的用户来说是不够的。Java很古老,仅此而已。