作者:LMS柳树_ | 来源:互联网 | 2022-12-19 16:52
考虑以下HashMap
实现
HashMap hashMap=new HashMap<>();
hashMap.put(new String("ABC"), "Hello");
hashMap.put("ABC", "Hello");
System.out.println(hashMap.size());
如何size
评估代码内部的代码如何返回1?但是,如果我使用StringBuffer
而不是String
代码返回值为2.这背后的原因是什么?
1> OldCurmudgeo..:
HashMap
s使用该hashCode
方法确定存储桶,然后equals
确定是否有任何现有对象与要添加的对象相同.在你的情况下,两个"ABC"
和new String("ABC")
将具有相同的hashCode
并且将被认为是相等的,String.equals
因此两个对象将被视为相同.
如果您不想这样,那么您可以考虑使用IdentityHashMap,它使用对象引用来比较相等性.