Java 为什么hashcode()返回一个整数而不是长?
在java中,hashcode()方法返回整数而不是long。有什么具体原因吗 好的,一个很好的原因是基于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就足够了;事实上,一个人需要在较低的位置有最
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很古老,仅此而已。