java - 使用相同的文字/字符串对象作为键时 HashMap 的大小?

标签 java string hashmap

请让我知道我的理解是否正确:
HashMap 的大小在这里是 2,因为当我们将键放在下面的映射中时,String equals(比较状态/内容而不是堆上的位置)方法出现了

Map hashMap = new HashMap();

hashMap.put("one", "1");
hashMap.put(new String("one"), "2");
hashMap.put("two", "3");
System.out.println("Hash Map KeySet Size : " + hashMap.keySet().size());

最佳答案

是的。

source code is the proof.

因为您使用字符串作为键,key.equals(k) 对于 "one" 作为键的情况是 true

     public V put(K key, V value) {
387         if (key == null)
388             return putForNullKey(value);
389         int hash = hash(key.hashCode());
390         int i = indexFor(hash, table.length);
391         for (Entry<K,V> e = table[i]; e != null; e = e.next) {
392             Object k;
393             if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
394                 V oldValue = e.value;
395                 e.value = value;
396                 e.recordAccess(this);
397                 return oldValue;
398             }
399         }
400 
401         modCount++;
402         addEntry(hash, key, value, i);
403         return null;
404     }

这是基本条件检查:

if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {

关于java - 使用相同的文字/字符串对象作为键时 HashMap 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18711223/

相关文章:

java - 你好。我收到 tomcat 错误 HTTP 状态报告 404 - 未找到

java - 为什么 this() 和 super() 必须是构造函数中的第一条语句?

mysql - 将字符串与mysql上的日期进行比较

android - 将 Intent 数据从 Activity 传递到类

c - 如何在C字符串中写入和读取一个以上的单词

java - 在 Java 中将字符串转换为 Hashmap

java - AspectJ 有什么用?

java - 如果预先知道元素数量,是否应该定义 HashMap 的初始容量和负载因子?

java - 映射到实现接口(interface)的类

java - Java 中的子字符串和 if 语句