Java中获取HashMap所有value最常用方式是调用values()方法,返回实时视图的Collection<V>,不可直接增删元素;可转为ArrayList、数组等副本使用,遍历支持增强for、Iterator和forEach。

Java 中 HashMap 获取所有 value 集合,最常用、最直接的方式是调用 values() 方法,它返回一个 Collection<V> 视图。
使用 values() 方法获取 value 集合
该方法返回的是 HashMap 内部 value 的**实时视图**,不是副本。对返回集合的某些操作(如迭代)会反映底层 map 的变化,但不能直接通过该集合增删元素(会抛 UnsupportedOperationException)。
- 代码示例:
HashMap<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
Collection<Integer> values = map.values(); // ✅ 正确方式
System.out.println(values); // [1, 2, 3](顺序不保证)
转为数组或具体集合类型(如 ArrayList)
如果需要可修改、可随机访问或线程安全的副本,建议将 values() 返回的 Collection 转为新集合:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 转成 ArrayList(常用):
List<Integer> valueList = new ArrayList<>(map.values());
- 转成 Object 数组:
Object[] valueArray = map.values().toArray();
- 转成泛型数组(需强转,注意类型安全):
Integer[] intArray = map.values().toArray(new Integer[0]);
遍历 value 集合的几种常见写法
获得 values 后,可通过多种方式遍历,无需先转集合:
立即学习“Java免费学习笔记(深入)”;
- 增强 for 循环(推荐):
for (Integer value : map.values()) {
System.out.println(value);
}
- 使用 Iterator:
Iterator<Integer> it = map.values().iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
- Java 8+ 使用 forEach + Lambda:
map.values().forEach(System.out::println);
注意事项
values() 返回的集合与原 HashMap 强关联:
- 修改原 map(如 put/remove),values 视图会立即反映变化;
- 不能对 values() 返回的集合调用 add()、remove() 等结构性修改方法;
- HashMap 不保证插入顺序,所以 values() 的遍历顺序也不保证(JDK 8 后底层可能用红黑树,但 value 顺序仍由 key 的 hash 和桶分布决定);
- 如需有序 value,应先按 key 排序再提取,或使用 LinkedHashMap + 自定义逻辑。

















