最直接简洁的方式是用 values() 方法配合增强 for 循环:调用 map.values() 获取值集合视图,再用 for-each 遍历每个 value;该集合无序、不可添加元素,但可通过迭代器 remove 安全删除键值对。

Java 中只遍历 HashMap 的所有值,最直接、简洁的方式是使用 values() 方法配合增强 for 循环(即 for-each)。
用 values() + 增强 for 循环遍历值
这是最常用、最推荐的做法,代码清晰,无需关心键,也不涉及额外查找开销:
- 调用
map.values()获取一个包含全部 value 的Collection视图 - 用 for-each 直接遍历该集合,每个元素就是对应 value
- 注意:这个集合不保证顺序(HashMap 本身无序),且不能通过它反查 key
示例:
HashMap<string integer> map = new HashMap();
map.put("apple", 10);
map.put("banana", 20);
map.put("cherry", 15);
for (Integer value : map.values()) {
System.out.println("Value: " + value);
}
// 输出可能为:10、20、15(顺序不确定)
</string>
用 values() + 迭代器遍历值
适用于需要在遍历中动态删除值的场景(比如满足条件时移除),但要注意:删除的是值对象本身,不会自动删除对应的键,且实际开发中极少单独删 value。
- 调用
map.values().iterator()获取迭代器 - 用
while(iterator.hasNext())遍历,iterator.next()返回 value - 可安全调用
iterator.remove()删除当前 value(底层会同步从 map 中移除该键值对)
示例:
Iterator<integer> valueIter = map.values().iterator();
while (valueIter.hasNext()) {
Integer v = valueIter.next();
if (v > 15) {
valueIter.remove(); // 安全删除该键值对
}
}
</integer>
不推荐的方式:先遍历 key 再 get(value)
虽然也能拿到所有值,但属于“绕路”做法:
- 需先调用
keySet(),再对每个 key 调用map.get(key) - 每次
get()都要重新计算哈希、定位桶、处理链表/红黑树 —— 多余开销 - 仅当你后续还需用到 key 时才考虑混合使用,纯取值场景应避免
补充说明
values() 返回的是 HashMap 内部维护的 value 集合视图,不是新拷贝。因此:
- 修改该集合(如通过迭代器 remove)会直接影响原 map
- 但不能向该集合 add 元素(抛
UnsupportedOperationException) - 遍历过程不支持并发修改(除非用
ConcurrentHashMap)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











