Java 21 中增加了一種新的集合類型:順序集合(Sequenced Collections)。
要介紹順序集合,就首先要說明一下出現(xiàn)順序(encounter order)。出現(xiàn)順序指的是在遍歷一個集合時,集合中元素的出現(xiàn)順序。
有些集合類型,有確定的出現(xiàn)順序,比如?List
。不管遍歷多少次這樣的集合,其中元素的出現(xiàn)順序始終是固定。
有些集合類型,并沒有確定的出現(xiàn)順序,比如?HashSet
。如果多次遍歷這樣的集合,其中元素的出現(xiàn)順序是不固定的。
在順序集合出現(xiàn)之前,Java 并沒有一個統(tǒng)一的接口來描述具有確定出現(xiàn)順序的集合。比如?Set
?接口雖然沒有確定的出現(xiàn)順序,但是它的子類型?LinkedHashSet
?和?SortedSet
?是有的。
另外一個問題是,對于有固定出現(xiàn)順序的集合,并沒有定義統(tǒng)一的與順序相關(guān)的操作。與順序集合的處理相關(guān)的方法,散落在 Java 集合類庫的不同地方。這些方法并沒有統(tǒng)一的聲明,使用起來也不方便。
與順序集合相關(guān)的操作包括:
獲取集合的第一個和最后一個元素
在集合的最前面和最后面插入或刪除元素
按照逆序來遍歷集合
Java 21 的順序集合會解決這些問題。增加了 3 個新的接口。
首先是?SequencedCollection
,該接口的聲明如下所示:
interface SequencedCollection<E> extends Collection<E> {
SequencedCollection<E> reversed();
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}
SequencedCollection
?繼承自?Collection
。
在包含的方法中:
reversed
?方法返回一個逆序的?SequencedCollection
?對象。addFirst
?和?addLast
?方法分別在集合的起始和結(jié)束位置添加新的元素。getFirst
?和?getLast
?方法分別獲取集合的第一個和最后一個元素。removeFirst
?和?removeLast
?方法分別刪除集合的第一個和最后一個元素。
除了?SequencedCollection
?之外,還有幾個具體的子類型:
SequencedSet
?同時繼承自?Set
?和?SequencedCollection
。
interface SequencedSet<E> extends Set<E>, SequencedCollection<E> {
SequencedSet<E> reversed();
}
SequencedMap
?繼承自?Map
,其中的 entry 有確定的出現(xiàn)順序。
SequencedMap
?中的方法比較多,如下所示:
interface SequencedMap<K,V> extends Map<K,V> {
SequencedMap<K,V> reversed();
SequencedSet<K> sequencedKeySet();
SequencedCollection<V> sequencedValues();
SequencedSet<Entry<K,V>> sequencedEntrySet();
V putFirst(K, V);
V putLast(K, V);
Entry<K, V> firstEntry();
Entry<K, V> lastEntry();
Entry<K, V> pollFirstEntry();
Entry<K, V> pollLastEntry();
}
具體的方法說明:
reversed
?方法返回一個 entry 逆序的?SequencedMap
。sequencedKeySet
?方法返回包含 key 的?SequencedSet
。sequencedValues
?方法返回包含 value 的?SequencedCollection
。sequencedEntrySet
?方法返回包含 entry 的?SequencedSet
。putFirst
?和?putLast
?分別在 entry 的最前和最后位置插入名值對。firstEntry
?和?lastEntry
?分別獲取第一個和最后一個 entry。pollFirstEntry
?和?pollLastEntry
?分別刪除第一個和最后一個 entry。
添加了這3個新的接口之后,Java 集合類的層次結(jié)構(gòu)發(fā)生了變化,如下圖所示:
綠色方框是新增的 3 個接口,從中可以看到已有集合類的繼承關(guān)系的變化:
List
?繼承自?SequencedCollection
。Deque
?繼承自?SequencedCollection
。LinkedHashSet
?實現(xiàn)了?SequencedSet
?接口。SortedSet
?繼承自?SequencedSet
。LinkedHashMap
?實現(xiàn)了?SequencedMap
?接口。SortedMap
?繼承自?SequencedMap
。文章來源:http://www.zghlxwxcb.cn/news/detail-451195.html
有了這3個新的順序集合相關(guān)的接口之后,Java 代碼可以更清楚地表達(dá)順序集合以及順序集合上的操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-451195.html
到了這里,關(guān)于【Java 21 新特性 】順序集合(Sequenced Collections)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!