顺序集合 API - 一口 Java

是否厌倦了在集合中查找最后一个元素或按相反顺序遍历集合时所需的样板代码?好消息是,随着 Java 21 和顺序集合 API 的发布,这些操作变得更加容易!让我们来看看。

新接口相同层次结构

新的顺序集合 API 已作为一系列新接口添加到现有集合层次结构中,用于具有定义的遭遇顺序的集合。在一些情况下,添加到新接口中的方法实际上是从较低级别类中提升的现有方法。

在集合方面,添加了两个新接口,SequencedCollectionSequencedSet

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 树中,这涵盖了大多数流行且常用的集合,如 ArrayListSortedSet,但会排除 HashSet,因为它没有定义的遭遇顺序。

对于 Map 树,常用的 HashMap 不会受益于顺序集合 API 的更改,因为它没有定义的遭遇顺序。如果你想使用 SequencedMap 中定义的新方法,你需要使用替代 Map 实现,如 TreeMapLinkedHashMap 或实现 SortedMapMap

其他阅读材料

顺序集合 - JEP 431 顺序集合 - Java 内幕播客 31

编码愉快!