JEP 431:序列化集合


序列化集合:有顺序的集合、有序集合。有序集合是其Collection元素具有定义的顺序的集合。
集合中都有一个明确定义的第一个元素、第二个元素等等,直到最后一个元素。
将引入统一的 API 来访问它的第一个和最后一个元素,以及以相反的顺序处理它的元素。

这里使用的“sequenced”一词是动词to sequence的过去分词,意思是“按特定顺序排列元素”:

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();
}

新reversed()方法提供了原始集合的逆序视图。对原始集合的任何修改都在视图中可见。如果允许,对视图的修改将写入原始集合。
逆序视图使所有不同的序列类型能够在两个方向上处理元素,使用所有常用的迭代机制:增强for循环、显式iterator()循环、 forEach()、stream()、parallelStream()和toArray()。

例如,从 a 中获取倒序流LinkedHashSet 以前是相当困难的;现在它只是

linkedHashSet.reversed().stream()

(reversed()方法本质上是重命名 NavigableSet::descendingSet,提升为SequencedCollection。)

SequencedCollection下面的方法来自 Deque. 它们支持在两端添加、获取和删除元素:

  • void addFirst(E)
  • void addLast(E)
  • E getFirst()
  • E getLast()
  • E removeFirst()
  • E removeLast()

序列集
一个序列集是Set一个SequencedCollection不包含重复元素的集合。

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


序列Map
有序map是Map条目具有定义的顺序的Map。

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();
}

SequencedMap下面的方法是来自 NavigableMap. 他们支持在两端获取和删除条目:

  • Entry<K, V> firstEntry()
  • Entry<K, V> lastEntry()
  • Entry<K, V> pollFirstEntry()
  • Entry<K, V> pollLastEntry()

改进
对现有的类和接口进行如下调整:

  • List作为SequencedCollection它的直接超级接口,
  • Deque作为SequencedCollection它的直接超级接口,
  • LinkedHashSet实施SequencedSet,
  • SortedSet作为SequencedSet它的直接超级接口,
  • LinkedHashMap实施SequencedMap和
  • SortedMap有SequencedMap作为它的直接超级接口。

还向实用程序类Collections添加了新方法来为三种新类型创建不可修改的包装器:

  • Collections.unmodifiableSequencedCollection(collection)
  • Collections.unmodifiableSequencedSet(sequencedSet)
  • Collections.unmodifiableSequencedMap(sequencedMap)

详细点击标题