正如我们许多人所知,最初HashMap
分配的内存默认初始容量为16,默认加载因子为0.75。现在,当我们尝试将值存储到HashMap
时,它首先通过在哈希映射键上调用哈希码函数来计算存储桶位置。假设用户定义的hashcode
方法返回的值大于整数范围且值超过HashMap
的初始容量地址,那么该值将如何存储在HashMap
中?
或
由于hashcode方法可以返回整数范围内的任何值,那么JVM如何知道它必须在最初分配的内存位置中存储哈希映射值?
答案 0 :(得分:0)
Hash Map
最多可以配对Integer.MAX_VALUE
,超过该限制后,会导致某些方法出现意外行为,例如size()
,但它不会影响remove()
等方法{1}},get()
和put()
因为remove()
从此映射中删除指定键的映射(如果存在),get()
返回指定键映射到的值,如果此映射不包含键的映射,则返回null。并且put()
将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。如何在新对象与现有对象之间发生冲突。
参考 - http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html
答案 1 :(得分:0)
存储对象的存储桶的索引是根据hashCode
的结果计算的,但实际上很少等于它。
e.g。如果你使用两个数量的桶,一个常见的方法是
bucketIndex = key.hashCode() & (numberOfBuckets - 1);
我不知道HashMap
用于计算存储区索引的精确方法。