java 21 新增 sequencedcollection 接口,作为 collection 的扩展,统一支持有序集合的首尾访问(getfirst/getlast)、两端增删(addfirst/addlast/removefirst/removelast)及逆序视图(reversed),适用于 arraylist、linkedlist、linkedhashset 等实现类,未修改 collection 原有定义。

Java 标准库中并不存在 Collection.sequence() 方法,也不存在名为 sequence() 的顺序集合抽象,更没有以此为基础对 Collection 顶级接口进行“重构”。
这是对 Java 集合框架的常见误解,可能源于混淆了以下几种情况:
1. Collection 本身不保证顺序,但某些实现类天然有序
-
List(如ArrayList、LinkedList)明确保证插入顺序,是有序集合; -
Set中的LinkedHashSet保持插入顺序,TreeSet按元素自然序或比较器排序; -
Collection接口作为顶层接口,只定义通用操作(add、remove、size、iterator等),不承诺任何顺序语义。
2. Java 从未在 Collection 接口中添加 sequence() 方法
-
Collection自 JDK 1.2 引入以来,接口结构高度稳定; - 后续版本(如 JDK 8 的
Stream、JDK 21 的SequencedCollection)引入了新抽象,但均未修改Collection原有定义; - 所有改动都通过新增接口实现,遵循接口演进的兼容性原则。
3. JDK 21 引入的 SequencedCollection 是真正的“顺序集合”抽象
- 它是一个新的标记型接口(extends
Collection),表示“具有明确定义的序列顺序”的集合; -
ArrayList、LinkedList、ArrayDeque、LinkedHashSet等已实现该接口; - 提供统一的顺序操作方法:
getFirst()、getLast()、addFirst(e)、addLast(e)、removeFirst()、removeLast(); - 它不是对
Collection的“重构”,而是平行扩展,用于更精准地表达行为契约。
4. 如何正确使用顺序集合语义?
- 若需顺序访问和操作,优先选择
SequencedCollection或其子接口(如List、Deque); - 避免将普通
Collection强转为SequencedCollection—— 不安全,运行时可能抛ClassCastException; - 判断是否支持顺序操作:
if (coll instanceof SequencedCollection sc) { Object first = sc.getFirst(); sc.addLast("new-item"); }
Java 集合的设计哲学是接口职责清晰、实现解耦、演进兼容。所谓“sequence() 重构”并不存在,真实进展是 JDK 21 用 SequencedCollection 为已有有序集合提供了统一、安全、可推断的顺序能力契约。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











