reversed()方法提供LinkedHashMap的实时反向视图而不改变原始插入顺序,其底层共享同一双向链表,遍历方向相反但节点位置不变,且仅Java 21+的SequencedMap实现(如LinkedHashMap、TreeMap)支持该方法。

reversed() 方法不会改变 LinkedHashMap 的原始迭代顺序,它只是提供一个动态、只读的反向视图。
反转视图是实时且双向同步的
调用 map.reversed() 后,返回的 SequencedMap 视图与原 LinkedHashMap 共享同一份底层数据结构(双向链表)。这意味着:
- 在原 map 中新增或修改条目,反转视图中会立即体现对应位置的变化
- 在反转视图中调用
put()或remove()等写操作(如果实现类支持),也会同步反映到原 map 中 - 但注意:该视图默认为只读语义——多数 JDK 实现中,
reversed()返回的视图对结构性修改抛出UnsupportedOperationException,真正可变操作必须通过原 map 进行
原始插入顺序始终不变
LinkedHashMap 的核心行为由其内部双向链表维护。无论是否调用 reversed(),它的迭代顺序永远保持初始插入顺序(或访问顺序,取决于构造参数):
- 第一次插入
"one"→ 它始终是第一个节点 - 最后一次插入
"three"→ 它始终是最后一个节点 -
reversed()只是让遍历时从链表尾部开始向前走,不移动、不复制、不重建任何节点
遍历行为对比清晰可见
假设创建如下 map:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
SequencedMap<String, Integer> map = new LinkedHashMap<>();map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
那么:
-
map.forEach(...)输出顺序是:one → two → three -
map.reversed().forEach(...)输出顺序是:three → two → one - 两者底层仍是同一个链表,只是迭代器方向相反
仅适用于支持 SequencedMap 的有序实现
该能力依赖 Java 21 引入的 SequencedMap 接口,因此:
-
LinkedHashMap和TreeMap支持reversed() -
HashMap不实现SequencedMap,无法调用此方法 - 必须使用 Java 21 或更高版本编译和运行

















