请查看以下代码。
Map<Long,String> unsortMap = new HashMap<Long,String>();
unsortMap.put(new Long(123), "a");
unsortMap.put(new Long(123), "ab");
在上述案例地图中,仅存储 123 和 ab 。我的理解是键值对存储在桶中。每个桶都有唯一的编号,由密钥的哈希码决定。在上面的代码中,由于两个密钥哈希码都不同,hashmap如何在内部表现?
谢谢!
答案 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将覆盖新值。