hashmap.keyset()返回键的实时set视图,支持遍历和迭代器安全删除,但不支持添加;可用增强for、iterator或stream处理,注意其无序性及修改限制。

在 Java 中,HashMap.keySet() 返回一个包含所有键的 Set 视图,可直接用于遍历获取全部键。这个集合是映射表的“实时视图”,不支持添加操作,但修改会影响原 HashMap。
使用增强 for 循环遍历 keySet()
这是最常用、最简洁的方式,适合只需读取键的场景:
- 调用
map.keySet()获取键集合 - 用
for (K key : map.keySet())直接迭代 - 注意:该 Set 无序(HashMap 不保证插入/遍历顺序)
示例:
HashMap<string integer> map = new HashMap();
map.put("apple", 5);
map.put("banana", 3);
map.put("cherry", 7);
for (String key : map.keySet()) {
System.out.println(key); // 输出顺序可能为 banana, apple, cherry
}
</string>
使用 Iterator 手动遍历(适合边遍历边删除)
当需要在遍历过程中安全删除某些键时,必须用 Iterator,避免 ConcurrentModificationException:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 通过
map.keySet().iterator()获取迭代器 - 用
it.hasNext()和it.next()遍历 - 删除用
it.remove(),而非map.remove()
示例(删除长度大于 5 的键):
Iterator<string> it = map.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
if (key.length() > 5) {
it.remove(); // 安全删除
}
}
</string>
转换为数组或流进行进一步处理
若需排序、过滤或批量操作,可将 keySet 转为数组或 Stream:
-
map.keySet().toArray()→ Object[];或map.keySet().toArray(new String[0]) -
map.keySet().stream()→ 支持 filter/map/sorted/collect 等操作 - 例如按字母序打印键:
map.keySet().stream().sorted().forEach(System.out::println)
注意事项与常见误区
几个关键细节需留意:
-
keySet()返回的是“视图”,不是副本 —— 对它的结构修改(如 add)会抛UnsupportedOperationException - 修改原 HashMap(如 put/remove)会立即反映在 keySet 中,反之亦然(如用 iterator.remove)
- 不要在增强 for 中调用
map.remove(key),否则运行时报错 - 如果需要有序遍历,请改用
LinkedHashMap(保持插入序)或TreeMap(自然/定制序)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










