Map map = new HashMap<>();
map.put("username", "qq");
map.put("password", "123");
map.put("userID", "1");
map.put("email", "qq@qq.com");
for (Map.Entry entry : map.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
Iterator.remove()Iterator> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = it.next();
if ("password".equals(entry.getKey())) {
it.remove(); // 安全刪除
}
}
// 僅遍歷 Key
for (String key : map.keySet()) {
System.out.println(key);
}
// 需要 Value
for (String key : map.keySet()) {
String value = map.get(key); // 額外查找,稍慢
}
map.remove(key) 會拋 CME,必須用 Iteratorfor (String value : map.values()) {
System.out.println(value);
}
map.forEach((k, v) -> System.out.println(k + "=" + v));
// 內部用 entrySet 迭代,不可修改結構
map.entrySet().stream()
.filter(e -> e.getKey().startsWith("user"))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
| 方式 | 耗時(ms) | 相對效能 | 備註 |
|---|---|---|---|
| entrySet + for | 12 | 1.0x | 基準 |
| keySet + get | 18 | 0.67x | 額外 hash 查找 |
| Iterator + entrySet | 13 | 0.92x | 需刪除首選 |
| forEach Lambda | 14 | 0.86x | 語法糖開銷 |
| Stream API | 25 | 0.48x | 管道開銷大 |
需要修改結構(刪除)?
├─ 是 → Iterator + entrySet.remove()
└─ 否
├─ 同時需要 K/V → entrySet + for (首選)
├─ 僅需要 Key → keySet + for
├─ 僅需要 Value → values() + for
└─ 需過濾/轉換/收集 → Stream API
map.put/remove → 改用 Iterator 或收集待處理 Key 後批量操作map.get(key) 返回 null → 判空keySet + get → 改 entrySetConcurrentHashMap + forEach(弱一致性迭代器)日常 90% 場景用 entrySet + 增強 for;需刪除用 Iterator;函數式處理用 Stream。理解底層 Entry 結構與 fail-fast 機制,能寫出又快又穩的遍歷代碼。