【发布时间】:2018-04-24 08:58:02
【问题描述】:
考虑下面的HashMap 实现
HashMap<String,String> hashMap=new HashMap<>();
hashMap.put(new String("ABC"), "Hello");
hashMap.put("ABC", "Hello");
System.out.println(hashMap.size());
代码如何将 size 返回为 1 以及如何在内部对其进行评估?但是,如果我使用 StringBuffer 而不是 String 代码返回值为 2。
这背后的原因是什么?
【问题讨论】:
-
HashMap先用对象的hashCode()再用equals()做比较。 -
如果
hashCode方法相等,并且equals方法返回true。 -
当我打印我试图放入映射中的两个键的哈希码时,它们是相等的,这说明它们将存储在同一个存储桶中,并且 .equals 将是评估。但是现在我有一个问题,当我使用不同的字符串初始化方法时,哈希码的计算结果是一样的。
-
尝试
new String("ABC").equals("ABC")和new StringBuffer("ABC").equals("ABC")- 第一个语句应该返回真,而第二个是假。 -
这个问题的标题是“Hasmap implementation”,但实际上你的问题是关于
java.util.HashMap中的equals()和hascode()实现。你介意改一下吗?