如果两个密钥具有相同的哈希码,您将如何检索Value对象?

时间:2015-01-07 11:03:02

标签: java

如果两个密钥具有相同的哈希码,您将如何检索Value对象?

4 个答案:

答案 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)。

如果两个键相同,则只为该单个键存储一个值。