java中HashMap常用api

增 / 改 (Create / Update)

API 方法 描述 备注
put(key, value) 存入键值对。如果 key 已存在,覆盖旧值。 最常用
putIfAbsent(key, value) 只有当 key 不存在时才存入。 避免覆盖
getOrDefault(key, default) 获取值,若 key 不存在则返回默认值。 统计频率必备

查 (Read)

API 方法 描述 备注
get(key) 获取 value。如果不包含该 key,返回 null 注意判空
containsKey(key) 判断 map 中是否有这个 key。 返回 boolean
containsValue(value) 判断 map 中是否有这个 value。 较慢,O(N)
size() 返回键值对的数量。
isEmpty() 判断是否为空。

删 (Delete)

API 方法 描述 备注
remove(key) 删除该 key 及其对应的 value。
clear() 清空 map 中所有数据。

遍历 (Iterate)

方式 1:遍历 Key (最简单)

for (Integer key : map.keySet()) {
    int value = map.get(key); // 再取一次值
    System.out.println(key + " -> " + value);
}

Java

for (Integer key : map.keySet()) {
    int value = map.get(key); // 再取一次值
    System.out.println(key + " -> " + value);
}

方式 2:遍历 Entry (效率最高,推荐) 如果你同时需要 key 和 value,建议用这个,比方式 1 少一次哈希查找。

// Map.Entry<K, V> 就像 C++ 的 pair
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}

Java

// Map.Entry<K, V> 就像 C++ 的 pair
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}

方式 3:只遍历 Value

for (Integer val : map.values()) {
    System.out.println(val);
}

有序 vs 无序:

  • HashMap: 无序,\(O(1)\),对应 C++ unordered_map (最常用)。
  • TreeMap: 按 Key 排序,\(O(\log N)\),对应 C++ map

Java

for (Integer val : map.values()) {
    System.out.println(val);
}