如果两个密钥具有相同的哈希码,您将如何检索Value对象?
答案 0 :(得分:1)
当两个密钥具有相同的哈希码时,将调用equals
函数来决定该做什么:
equals
的调用结果),则两个密钥被认为是相同的,因此哈希映射中只有一个密钥答案 1 :(得分:0)
哈希地图内幕
有一个名为table的Entry[]
数组,其大小为16
。
此表存储Entry
类的对象。 HashMap
类有一个名为Entry
的内部类。此条目具有键值作为实例变量。
让我们看一下入门类入门结构的结构。
static class Entry implements Map.Entry
{
final K key;
V value;
Entry next;
final int hash;
...//More code goes here
}
每当我们尝试在hashmap
中放置任何键值对时,Entry
类对象将被实例化为键值,并且该对象将存储在上面提到的Entry[]
(表)中。
现在你一定想知道,上面创建的Enrty
对象将被存储在哪里(表中的确切位置)。答案是,通过调用hascode()
方法计算密钥的哈希码。 此哈希码用于计算上述Entry[]
表的索引。
如果哈希码相同,那么索引是相同的,这样它就会覆盖你的最后一个值。
示例:
Hashcode for Japan = 95 as its length is odd.
Hashcode for India =95 as its length is odd
HashCode for Russia=31 as its length is even.
HashCode for France=31 as its length is even.
我们在hashmap中放了4个键值,但似乎只有2个!!!!这是因为如果两个对象具有相同的哈希码,它们将存储在相同的索引中。现在问题是怎么产生的?它以LinkedList(logically)
的形式存储对象。 Refer very good tutorial
答案 2 :(得分:0)
如果 Two Key are same
,则JAVA将 overwrite the previous key and value with new one
。
答案 3 :(得分:0)
如果两个密钥具有相同的hashCode
(并不意味着它们是相同的),它们将存储在HashMap
内的相同链表中(假设您询问{ {1}} s),将确定要返回的值是将具有相同hashCode的所有密钥与请求的密钥进行比较(使用HashMap
)。
如果两个键相同,则只为该单个键存储一个值。