序列化集合:有顺序的集合、有序集合。有序集合是其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)
详细点击标题