推荐使用entrySet()配合增强for循环,因性能好、代码清晰且避免重复查值;仅需键或值时用keySet()/values();需遍历时删除用Iterator;Java 8+可选Stream实现函数式操作。

Java中遍历Map有多种方式,核心在于根据使用场景选择合适的方法:注重简洁用增强for+entrySet(),需要键值分离用keySet()或values(),追求函数式风格用Stream,老版本兼容或需索引控制则用迭代器。
使用entrySet()配合增强for循环(推荐)
这是最常用、性能较好且代码清晰的方式。entrySet()返回Map.Entry对象集合,每个Entry包含key和value,避免了重复查值开销。
- 适用于大多数日常开发场景
- 比先keySet()再get()更高效(后者可能触发二次哈希查找)
- 示例:for (Map.Entry
entry : map.entrySet()) { System.out.println(entry.getKey() + "=" + entry.getValue()); }
通过keySet()或values()单独遍历
当只需要键或只需要值时使用,语义明确、内存友好。
- 只遍历键:for (String key : map.keySet()) { System.out.println(key); }
- 只遍历值:for (Integer value : map.values()) { System.out.println(value); }
- 注意:values()返回的是Collection视图,不保证顺序(取决于具体Map实现)
使用Iterator手动迭代(兼容性好,支持删除)
适合需要在遍历中安全删除元素的场景,或需精确控制流程(如分页、中断)。
立即学习“Java免费学习笔记(深入)”;
- 必须用Iterator.remove()删除,直接调用map.remove()会抛ConcurrentModificationException
- 示例:Iterator
> iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry e = iter.next(); if (e.getValue()
Java 8+ Stream API方式(函数式、链式操作)
适合配合过滤、映射、聚合等操作,代码简洁但有一定学习成本和轻微性能开销。
- 遍历并打印:map.entrySet().stream().forEach(e -> System.out.println(e.getKey() + "=" + e.getValue()));
- 筛选后收集:List
keys = map.entrySet().stream() .filter(e -> e.getValue() > 5).map(Map.Entry::getKey).collect(Collectors.toList()); - 注意:Stream不适用于高频、低延迟场景,且无法在遍历时修改原Map










