最直接高效的方式是使用keySet()方法配合增强for循环遍历;keySet()返回与原map关联的Set视图,支持安全迭代删除,Java 8+可用forEach+Lambda,避免使用entrySet()仅取key。

在 Java 中,只遍历 HashMap 的所有 key,最直接、高效的方式是使用 keySet() 方法获取 key 的集合,再用增强 for 循环或迭代器遍历。
用增强 for 循环遍历 keySet()
keySet() 返回一个包含所有 key 的 Set 视图,它与原 map 保持关联(修改会影响原 map),且不允许重复(符合 Set 特性)。这是最常用、最简洁的方式:
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);
for (String key : map.keySet()) {
System.out.println(key);
}
// 输出:apple、banana、cherry(顺序不保证)
用迭代器遍历 keySet()
适合需要在遍历中删除 key 的场景(避免 ConcurrentModificationException),因为只有通过迭代器的 remove() 方法才是安全的:
Iterator<String> keyIter = map.keySet().iterator();
while (keyIter.hasNext()) {
String key = keyIter.next();
System.out.println(key);
// 如需删除当前 key,可调用:
// keyIter.remove(); // 安全删除
}
用 forEach + Lambda(Java 8+)
语法更紧凑,适合简单操作;注意 lambda 中不能修改 map 结构(如 put/remove),否则会抛异常:
立即学习“Java免费学习笔记(深入)”;
map.keySet().forEach(key -> System.out.println(key));
不推荐:先取 entrySet 再只用 key
虽然 entrySet() 也能拿到 key(e.getKey()),但它额外构造了 Map.Entry 对象,有轻微开销。如果**只需要 key**,没必要绕路:
- ❌ 不必要:for (Map.Entry<String, Integer> e : map.entrySet()) { System.out.println(e.getKey()); }
- ✅ 推荐:直接用
keySet(),语义清晰、性能略优
不复杂但容易忽略 —— 记住 keySet() 就是专为这个目的设计的 API。


















