顺序集合 API - 一口 Java
Billy Korando 于 2023 年 10 月 2 日发布
是否厌倦了在集合中查找最后一个元素或按相反顺序遍历集合时所需的样板代码?好消息是,随着 Java 21 和顺序集合 API 的发布,这些操作变得更加容易!让我们来看看。
新接口相同层次结构
新的顺序集合 API 已作为一系列新接口添加到现有集合层次结构中,用于具有定义的遭遇顺序的集合。在一些情况下,添加到新接口中的方法实际上是从较低级别类中提升的现有方法。
在集合方面,添加了两个新接口,SequencedCollection
和 SequencedSet
java.util.SequencedCollection
包含以下方法
interface SequencedCollection<E>
extends Collection<E> {
// New method
SequencedCollection<E> reversed();
// Methods promoted from Deque
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}
java.util.SequenceSet
包含一个方法,reversed()
的覆盖,它返回一个 SequencedSet
interface SequencedSet<E> extends Set<E>,
SequencedCollection<E> {
// covariant override
SequencedSet<E> reversed();
}
在集合层次结构的 Map
方面,添加了一个接口 SequencedMap
以下是 java.util.SequencedMap
内容的详细介绍
interface SequencedMap<K,V> extends Map<K,V> {
// new methods
SequencedMap<K,V> reversed();
SequencedSet<K> sequencedKeySet();
SequencedCollection<V> sequencedValues();
SequencedSet<Entry<K,V>> sequencedEntrySet();
V putFirst(K, V);
V putLast(K, V);
// methods promoted from NavigableMap
Entry<K, V> firstEntry();
Entry<K, V> lastEntry();
Entry<K, V> pollFirstEntry();
Entry<K, V> pollLastEntry();
}
定义的遭遇顺序
如前所述,顺序集合 API 更新了具有定义的遭遇顺序的集合。在 Collection
树中,这涵盖了大多数流行且常用的集合,如 ArrayList
和 SortedSet
,但会排除 HashSet
,因为它没有定义的遭遇顺序。
对于 Map
树,常用的 HashMap
不会受益于顺序集合 API 的更改,因为它没有定义的遭遇顺序。如果你想使用 SequencedMap
中定义的新方法,你需要使用替代 Map
实现,如 TreeMap
、LinkedHashMap
或实现 SortedMap
的 Map
。
其他阅读材料
顺序集合 - JEP 431 顺序集合 - Java 内幕播客 31
编码愉快!