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