HashMap
在内部使用固定长度的数组,并且存储值的索引是基于key
的哈希值计算的,如果哈希冲突,则会在该索引上创建一个链表,然后在读取时使用equals
方法返回正确的值。
我有一个自定义类,其中包含一个连续数字的Integer
id,我将此类用作HashSet
中的'key'
,并且在hasCode()
方法中返回id,这意味着HashSet
的底层数组将查找从hasCode()
返回的索引号N来存储值。
现在,即使我从hashCode()
返回Integer.MAX_VALUE - 1
,HashMap
仍能够将该值存储在映射中。问题是,Integer.MAX_VALUE -1
是否被用作底层数组的索引?如果是,HashMap
在创建实例时是否会创建那么大的数组?
HashMap
如何工作的描述,根据官方文档和源代码,@Gyro Gearless。不需要猜测。 - Lew Bloch