本文目录导读:

- Java 8 (2014年) - 新增最多
- Java 9 (2017年) - 静态工厂方法
- Java 10 (2018年) - 无Map直接新增,但支持copyOf
- Java 11 (2018年) - 无Map方法新增
- Java 12-15 (2019-2020年) - 无Map方法新增
- Java 16 (2021年) - 新增 toList 在 Stream 中,Map 无变化
- Java 17 (2021年) - 无Map方法新增(LTS版本)
- Java 21 (2023年) - 新增顺序Map相关方法
- 常用方法示例
截至2025年5月,Java 8 到 Java 21 版本中,java.util.Map 接口新增了若干默认方法和静态方法,以下按版本梳理主要新增方法:
Java 8 (2014年) - 新增最多
// 1. 获取或默认值 V getOrDefault(Object key, V defaultValue) // 2. 遍历操作 void forEach(BiConsumer<? super K, ? super V> action) // 3. 替换操作 void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) V replace(K key, V value) boolean replace(K key, V oldValue, V newValue) // 4. 计算操作(原子性) V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) // 5. 合并操作 V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) // 6. 条件插入 V putIfAbsent(K key, V value) boolean remove(Object key, Object value)
Java 9 (2017年) - 静态工厂方法
// 不可变Map工厂方法 static <K, V> Map<K, V> of() static <K, V> Map<K, V> of(K k1, V v1) // ... 重载到10个键值对 static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, ..., K k10, V v10) // 任意数量键值对的不可变Map static <K, V> Map<K, V> ofEntries(Map.Entry<? extends K, ? extends V>... entries) // 创建 Map.Entry 的辅助方法 static <K, V> Map.Entry<K, V> entry(K k, V v)
Java 10 (2018年) - 无Map直接新增,但支持copyOf
// 在 Map 接口中(通过List/Set的copyOf模式,Map在Java 10没有直接新增)
Java 11 (2018年) - 无Map方法新增
Java 12-15 (2019-2020年) - 无Map方法新增
Java 16 (2021年) - 新增 toList 在 Stream 中,Map 无变化
Java 17 (2021年) - 无Map方法新增(LTS版本)
Java 21 (2023年) - 新增顺序Map相关方法
// 顺序Map接口(SequencedMap 作为子接口) // Map 接口本身未新增,但 LinkedHashMap 实现了 SequencedMap // SequencedMap 接口中的方法: V firstEntry() // 获取第一个entry V lastEntry() // 获取最后一个entry V pollFirstEntry() // 移除并返回第一个entry V pollLastEntry() // 移除并返回最后一个entry SequencedMap<K, V> reversed() // 返回逆序视图
常用方法示例
// Java 8 - computeIfAbsent(最常用之一)
Map<String, List<Integer>> map = new HashMap<>();
map.computeIfAbsent("key", k -> new ArrayList<>()).add(1);
// Java 8 - merge
map.merge("count", 1, Integer::sum); // 计数+1
// Java 9 - 不可变Map
Map<String, Integer> immutable = Map.of("a", 1, "b", 2);
// Java 21 - 顺序操作(仅LinkedHashMap)
LinkedHashMap<String, Integer> orderedMap = new LinkedHashMap<>();
orderedMap.putFirst("a", 1); // 插入到开头
大多数实用的新增方法集中在 Java 8(计算、合并、默认值)和 Java 9(不可变Map工厂),后续版本主要是内部优化和顺序Map支持。