网站首页 > 精选教程 正文
Java 21 中增加了一种新的集合类型:顺序集合(Sequenced Collections)。要介绍顺序集合,就首先要说明一下出现顺序(encounter order)。出现顺序指的是在遍历一个集合时,集合中元素的出现顺序。
有些集合类型,有确定的出现顺序,比如 List。不管遍历多少次这样的集合,其中元素的出现顺序始终是固定。
有些集合类型,并没有确定的出现顺序,比如 HashSet。如果多次遍历这样的集合,其中元素的出现顺序是不固定的。
在顺序集合出现之前,Java 并没有一个统一的接口来描述具有确定出现顺序的集合。比如 Set 接口虽然没有确定的出现顺序,但是它的子类型 LinkedHashSet 和 SortedSet 是有的。
另外一个问题是,对于有固定出现顺序的集合,并没有定义统一的与顺序相关的操作。与顺序集合的处理相关的方法,散落在 Java 集合类库的不同地方。这些方法并没有统一的声明,使用起来也不方便。
与顺序集合相关的操作包括:
- 获取集合的第一个和最后一个元素
- 在集合的最前面和最后面插入或删除元素
- 按照逆序来遍历集合
Java 21 的顺序集合会解决这些问题。
增加了 3 个新的接口:
首先是 SequencedCollection
该接口的声明如下所示:
interface SequencedCollection<E> extends Collection<E> {
SequencedCollection<E> reversed();
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}
SequencedCollection 继承自 Collection。
在包含的方法中:
- reversed 方法返回一个逆序的 SequencedCollection 对象
- addFirst 和 addLast 方法分别在集合的起始和结束位置添加新的元素
- getFirst 和 getLast 方法分别获取集合的第一个和最后一个元素
- removeFirst 和 removeLast 方法分别删除集合的第一个和最后一个元素
除了 SequencedCollection 之外,还有几个具体的子类型:
SequencedSet 同时继承自 Set 和 SequencedCollection。
interface SequencedSet<E> extends Set<E>, SequencedCollection<E> {
SequencedSet<E> reversed();
}
SequencedMap 继承自 Map,其中的 entry 有确定的出现顺序。
SequencedMap 中的方法比较多,如下所示:
interface SequencedMap<K,V> extends Map<K,V> {
SequencedMap<K,V> reversed();
SequencedSet<K> sequencedKeySet();
SequencedCollection<V> sequencedValues();
SequencedSet<Entry<K,V>> sequencedEntrySet();
V putFirst(K, V);
V putLast(K, V);
Entry<K, V> firstEntry();
Entry<K, V> lastEntry();
Entry<K, V> pollFirstEntry();
Entry<K, V> pollLastEntry();
}
具体的方法说明:
- 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 代码可以更清楚的表达顺序集合以及顺序集合上的操作。
猜你喜欢
- 2024-12-27 Java集合、多线程、反射和Spring框架总结,源码解析
- 2024-12-27 面试官必问:Java中的JUC工具类详细揭秘
- 2024-12-27 C# 基础知识系列- 3 集合数组
- 2024-12-27 100个Java工具类之59:集合HashMap
- 2024-12-27 常见面试题之java系列
- 2024-12-27 初步认识Java集合框架
- 2024-12-27 java中常用第三方类库
- 2024-12-27 Java Collections 工具类集合框架中常用算法解析
- 2024-12-27 GUAVA集合类使用总结
- 2024-12-27 Java集合-Properties
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)