--- title: "java中HashMap常用api" created: 2025-12-16 --- # 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 (最简单)** ```java for (Integer key : map.keySet()) { int value = map.get(key); // 再取一次值 System.out.println(key + " -> " + value); } ``` Java ```java for (Integer key : map.keySet()) { int value = map.get(key); // 再取一次值 System.out.println(key + " -> " + value); } ``` **方式 2:遍历 Entry (效率最高,推荐)** 如果你同时需要 key 和 value,建议用这个,比方式 1 少一次哈希查找。 ```java // Map.Entry 就像 C++ 的 pair for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey() + " -> " + entry.getValue()); } ``` Java ```java // Map.Entry 就像 C++ 的 pair for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey() + " -> " + entry.getValue()); } ``` **方式 3:只遍历 Value** ```java for (Integer val : map.values()) { System.out.println(val); } ``` **有序 vs 无序**: - `HashMap`: 无序,\(O(1)\),对应 C++ `unordered_map` (最常用)。 - `TreeMap`: 按 Key 排序,\(O(\log N)\),对应 C++ `map`。 Java ```java for (Integer val : map.values()) { System.out.println(val); } ```