hashmap在以下场景中的表现如何?

时间:2012-03-20 10:45:01

标签: java

请查看以下代码。

Map<Long,String> unsortMap = new HashMap<Long,String>();
unsortMap.put(new Long(123), "a");
unsortMap.put(new Long(123), "ab");

在上述案例地图中,仅存储 123 ab 。我的理解是键值对存储在桶中。每个桶都有唯一的编号,由密钥的哈希码决定。在上面的代码中,由于两个密钥哈希码都不同,hashmap如何在内部表现?

谢谢!

4 个答案:

答案 0 :(得分:4)

如果Long hashCode方法被覆盖,则如果数值相同则返回相同的值。实际上,查看source code内部的方法是这样的:

public int hashCode() {
   return (int)(value ^ (value >>> 32));
}

答案 1 :(得分:1)

如果您运行下面的代码,您将看到2个肺的哈希码相同,尽管它们是不同的实例(引用不相等):

public static void main(String[] args) {
    Long a = new Long(123);
    Long b = new Long(123);
    System.out.println(a.hashCode()); //123
    System.out.println(b.hashCode()); //123
    System.out.println(a == b); //false
}

答案 2 :(得分:1)

Hashcode is not different for identical long values

  

由原始长值的两半的异或   这个Long对象。也就是说,哈希码是的值   表达式:

     

(INT)(this.longValue()^(this.longValue()&GT;&GT;&GT; 32))

答案 3 :(得分:0)

在hashmap中,key在整个地图上必须是唯一的。如果要为同一个键插入不同的值,则HashMap将覆盖新值。