如果Hashmap值超出整数范围,则存储值

时间:2015-09-08 08:05:02

标签: hashmap integer-overflow

正如我们许多人所知,最初HashMap分配的内存默认初始容量为16,默认加载因子为0.75。现在,当我们尝试将值存储到HashMap时,它首先通过在哈希映射键上调用哈希码函数来计算存储桶位置。假设用户定义的hashcode方法返回的值大于整数范围且值超过HashMap的初始容量地址,那么该值将如何存储在HashMap中?

由于hashcode方法可以返回整数范围内的任何值,那么JVM如何知道它必须在最初分配的内存位置中存储哈希映射值?

2 个答案:

答案 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用于计算存储区索引的精确方法。