Java中的顺序集合API


是否对查找集合中最后一个元素或以相反顺序单步执行集合所需的样板感到恼火?好消息是,随着 Java 21 和 顺序集合(Sequenced Collections 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();
}

定义的相遇顺序
如前所述,Sequenced Collections API 可以更新具有已定义相遇顺序的集合。在集合树中,这涵盖了大多数流行和常用的集合,如 ArrayList 和 SortedSet,但不包括 HashSet,因为它没有定义的相遇顺序。

对于Map树,常用的 HashMap 无法从顺序集合 API 的更改中受益,因为它没有定义的相遇顺序。如果想使用 SequencedMap 中定义的新方法,则需要使用其他Map实现,如 TreeMap、LinkedHashMap 或实现 SortedMap 的Map。