簡介
本文我們將探討不同 jdk 版本中各類的起源,以及新引入的類和接口背后的目的。我們將分析之前版本存在的問題,以及為何需要引入新的類或接口。此外,我們還將介紹集合類和接口中的新特性。文章將逐一解答這些問題。
我們將逐步學(xué)習(xí) Java 集合類的優(yōu)化過程,并按版本逐一對比分析。主要討論的焦點將包括 JDK 1.0、1.2、1.4、1.5、1.6、1.8、9、10、11 和 21 版本的 Java 集合功能
Java 集合 API 的改進(jìn)
Java 集合 API 在多年中經(jīng)歷了顯著改進(jìn),引入了新功能、增強(qiáng)和優(yōu)化,以提高開發(fā)者的生產(chǎn)力、改善性能,并適應(yīng)修訂的編程模式和需求。它將幫助開發(fā)者利用 Java 集合的力量構(gòu)建更健壯、高效和可維護(hù)的應(yīng)用程序。
JDK 1.0 中的集合類
在 JDK 1.0 中,有四個類 Vector、Stack、Hashtable 和 Properties。此外,還有一個名為“Enumeration”的接口,用于以簡單的方式遍歷值。進(jìn)一步分類,Stack 是 Vector 的子類,Properties 是 Hashtable 的子類。
Vector 類的問題
Vector 是線程安全的,即 Vector 中的所有方法都是同步的。因此,它不適合單線程環(huán)境。
由于它在內(nèi)部基于數(shù)組工作,插入和刪除操作非常慢。
它允許在其中添加重復(fù)元素
無法按順序存儲元素
Hashtable 類的問題
Hashtable 是線程安全的,即 Hashtable 中的所有方法都是同步的。因此,它不適合單線程環(huán)境。
Hashtable 無法按順序存儲條目
Enumeration 的問題
無法刪除元素且方法名稱過長
JDK 1.2 中的集合類
在 JDK 1.2 中,Sun Micro-system 引入了 ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap、Iterator 和 ListIterator。
ArrayList:用于提供單線程環(huán)境下的解決方案,因為 ArrayList 中的方法不是同步的。
LinkedList 用于提供更快的元素插入和刪除。
HashSet:不允許有重復(fù)元素。
TreeSet:用于按排序順序存儲元素。
HashMap:提供單線程環(huán)境下的解決方案,因為 HashMap 中的方法不是同步的。
TreeMap:用于按順序存儲鍵值對。
Iterator:用于解決枚舉問題。同時還有一個專門處理列表的類 ListIterator。
HashSet 的問題:它不能保持插入順序,即它不會按照元素添加到集合中的順序存儲元素。
HashMap 的問題:像 HashSet 一樣,它不能保持插入順序。
JDK 1.4 中的集合類
在 JDK 1.2 中,Sun Microsystems 引入了 LinkedHashSet 和 LinkedHashMap。
LinkedHashSet:用于解決 HashSet 中插入順序的問題。它按照元素添加到集合中的順序存儲元素。
LinkedHashMap:用于解決 HashMap 中插入順序的問題。它還按照元素添加到集合中的順序存儲元素。
JDK 1.5 中的集合類
for-Each 循環(huán):作為替代迭代器進(jìn)行迭代的另一種方法
CopyOnWriteArrayList:引入以允許在修改底層列表的情況下安全地迭代元素。
CopyOnWriteArraySet:它使用內(nèi)部 CopyOnWriteArrayList 進(jìn)行所有操作。因此,它具有與該列表相同的基本屬性。
JDK 1.6 中的集合類
NavigableSet:作為擴(kuò)展了導(dǎo)航方法的有序集合,用于報告給定搜索目標(biāo)的最近匹配。
NavigableMap:作為擴(kuò)展了導(dǎo)航方法的 SortedMap,返回給定搜索目標(biāo)的最近匹配項。
JDK 1.8 中的集合類
Java 集合框架也有新更新,以支持 lambda 表達(dá)式、流和聚合操作。
stream() 作為父接口 Collection 的默認(rèn)方法:返回一個以該集合為源的順序 Stream。
parallelStream() 作為父接口 Collection 的默認(rèn)方法:返回一個可能并行的 Stream,以這個集合作為其源。
spliterator() 作為父接口 Collection 的一個默認(rèn)方法:創(chuàng)建一個遍歷此集合中元素的 Spliterator
removeIf(Predicate filter) 作為父接口 Collection 的默認(rèn)方法:移除滿足給定謂詞的所有元素。
同樣重要的是,這里的一個顯著點是所有新添加的方法都是接口 Collection 內(nèi)部的默認(rèn)方法。這是使用默認(rèn)方法的最佳示例。
Java 9 中的集合增強(qiáng)
新增用于創(chuàng)建不可變列表、集合和映射的 of() 靜態(tài)工廠方法介紹。這些方法包括:List.of(), Set.of(), Map.of(), Map.ofEntries()
Arrays.mismatch():新增方法以查找兩個數(shù)組中第一個不匹配的索引。
Arrays.compare():添加了新方法來比較提供的兩個數(shù)組中的元素。
為 Arrays.equals() 添加了更多重載方法。
Enumeration.asIterator():添加了返回 java.util.Iterator 實例的新方法。
此外,在 Stream API 中添加了一些方法,如 dropWhile、takeWhile 和 ofNullable。
Java 10 中的集合增強(qiáng)
引入了 List.copyOf()、Set.copyOf() 和 Map.copyOf(),用于創(chuàng)建現(xiàn)有集合的不變副本。
Java 11 中的集合增強(qiáng)
Collection.toArray(IntFunction):添加了新的默認(rèn)方法,允許將集合的元素轉(zhuǎn)移到新創(chuàng)建的具有所需運行時類型的數(shù)組中。新方法是現(xiàn)有 toArray(…) 方法的重載變體。
Java 21 中的集合增強(qiáng)
Java 21 在集合框架中引入了三個新接口:SequencedCollection、SequencedSet 和 SequencedMap。這些新的集合接口通過新庫提供的默認(rèn)方法,使我們能夠訪問其第一個和最后一個元素。該功能還允許我們通過簡單的調(diào)用方法來獲取集合的反轉(zhuǎn)視圖。
SequencedCollection 序列集合
defaultvoidaddFirst(Ee) defaultvoidaddLast(Ee) defaultEgetFirst() defaultEgetLast() defaultEremoveFirst() defaultEremoveLast() SequencedCollectionreversed()
SequencedSet 序列集合
SequencedSetreversed()
SequencedMap 序列映射
defaultMap.EntryfirstEntry() defaultMap.Entry lastEntry() defaultMap.Entry pollFirstEntry() defaultMap.Entry pollLastEntry() defaultVputFirst(Kk,Vv) defaultVputLast(Kk,Vv) SequencedMap reversed() defaultSequencedSet >sequencedEntrySet() defaultSequencedSet sequencedKeySet() defaultSequencedCollection sequencedValues()
-
JAVA
+關(guān)注
關(guān)注
19文章
2966瀏覽量
104700 -
API
+關(guān)注
關(guān)注
2文章
1499瀏覽量
61957
原文標(biāo)題:Java集合API的改進(jìn)
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論