JDK21新特性-序列集合

1. 什么是序列集合

序列集合是指元素有明确顺序的集合,如List、Deque等。Java 21为这类集合引入了统一的API。

2. 新增接口

在JDK21中新增了3个接口:

java 复制代码
interface SequencedCollection<E> extends Collection<E> {
    // 新增方法
    SequencedCollection<E> reversed();
    void addFirst(E);
    void addLast(E);
    E getFirst();
    E getLast();
    E removeFirst();
    E removeLast();
}

interface SequencedSet<E> extends Set<E>, SequencedCollection<E> {
    SequencedSet<E> reversed();
}

interface SequencedMap<K,V> extends Map<K,V> {
    // 新增方法
    SequencedMap<K,V> reversed();
    void putFirst(K, V);
    void putLast(K, V);
    Entry<K,V> firstEntry();
    Entry<K,V> lastEntry();
    Entry<K,V> pollFirstEntry();
    Entry<K,V> pollLastEntry();
}

SequencedCollection 继承自 Collection。

在包含的方法中:

  • reversed 方法返回一个逆序的 SequencedCollection 对象。
  • addFirst 和 addLast 方法分别在集合的起始和结束位置添加新的元素。
  • getFirst 和 getLast 方法分别获取集合的第一个和最后一个元素。
  • removeFirst 和 removeLast 方法分别删除集合的第一个和最后一个元素。

除了SequencedCollection 之外,还有几个具体的子类型:

1、SequencedSet 同时继承自 Set 和 SequencedCollection。

2、SequencedMap 继承自 Map,其中的 entry 有确定的出现顺序。具体的方法说明:

  • reversed 方法返回一个 entry 逆序的 SequencedMap。
  • sequencedKeySet 方法返回包含 key 的 SequencedSet。
  • sequencedValues 方法返回包含 value 的 SequencedCollection。
  • sequencedEntrySet 方法返回包含 entry 的 SequencedSet。
  • putFirst 和 putLast 分别在 entry 的最前和最后位置插入名值对。
  • firstEntry 和 lastEntry 分别获取第一个和最后一个 entry。
  • pollFirstEntry 和 pollLastEntry 分别删除第一个和最后一个 entry。

3.集合类层级结构

因此java集合类的层次结构发生了变化,如下图:

绿色方框是新增的 3 个接口,从中可以看到已有集合类的继承关系的变化:

  • List 继承自 SequencedCollection。
  • Deque 继承自 SequencedCollection。
  • LinkedHashSet 实现了 SequencedSet 接口。
  • SortedSet 继承自 SequencedSet。
  • LinkedHashMap 实现了 SequencedMap 接口
  • SortedMap 继承自 SequencedMap。

有了这3个新的顺序集合相关的接口之后,Java 代码可以更清楚地表达顺序集合以及顺序集合上的操作。

相关推荐
来杯@Java2 分钟前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis
不知名的老吴1 小时前
线程的生命周期之线程“插队“
java·开发语言·python
ANnianStriver1 小时前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
杨了个杨89822 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
马士兵教育4 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
snow@li4 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
云烟成雨TD5 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework5 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java
逍遥德5 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
云烟成雨TD5 小时前
Spring AI 1.x 系列【54】Retry 机制分析
java·人工智能·spring