Piy*_*ale -2 java hash hashmap
考虑以下HashMap实现
HashMap<String,String> hashMap=new HashMap<>();
hashMap.put(new String("ABC"), "Hello");
hashMap.put("ABC", "Hello");
System.out.println(hashMap.size());
Run Code Online (Sandbox Code Playgroud)
如何size评估代码内部的代码如何返回1?但是,如果我使用StringBuffer而不是String代码返回值为2.这背后的原因是什么?
HashMaps使用该hashCode方法确定存储桶,然后equals确定是否有任何现有对象与要添加的对象相同.在你的情况下,两个"ABC"和new String("ABC")将具有相同的hashCode并且将被认为是相等的,String.equals因此两个对象将被视为相同.
如果您不想这样,那么您可以考虑使用IdentityHashMap,它使用对象引用来比较相等性.