Sequence
中的新Java 21
界面是什么?它添加了什么以及需要考虑的常见问题是什么?
Sequence
接口是Java对顺序Collections
的标准化,它具有逻辑顺序,或者正如Java Jep所说的“遭遇顺序”。 SortedSet
将能够保持其自然顺序,List
保持其插入顺序等。
它添加的方法有
SequencedCollection<E> reversed();
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
getFirst()
方法可以替代list.get(0)
、deque.getFirst()
、sortedSet.first()
和linkedHashSet.iterator().next()
。与 getLast()
相同,除了 LinkedHashSet
没有最后一个,你必须迭代整个 Set。在我看来,关于SortedSet
,这有些奇怪。 SortedSet
被迫实现 addFirst()
和 addLast()
方法,这些方法在上下文中没有意义,并且 Jep 说“这些方法可以抛出 UnsupportedOperationException
”。
Reversed()
还标准化了如何向后迭代。以前有 navSet.descendingSet()
、deque.descendingIterator()
和 for (var it = list.listIterator(list.size()); it.hasPrevious();) {}
,而 LinkedHashSet
又没有方法。现在 reversed()
允许使用 for、流等所有标准迭代技术,并包括 LinkedHashSet
。
最后一点是,如果代码库使用这些方法名称,它们将会遇到问题。请参阅 Jep 了解该项目的完整描述。