RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java集合API的改進(jìn)介紹

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 2024-11-22 11:12 ? 次閱讀

簡介

本文我們將探討不同 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)的最近匹配項。

b43c5758-a32f-11ef-93f3-92fbcf53809c.jpg

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)方法的最佳示例。

b44867be-a32f-11ef-93f3-92fbcf53809c.png

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)視圖。

b45babb2-a32f-11ef-93f3-92fbcf53809c.png

SequencedCollection 序列集合

defaultvoidaddFirst(Ee)
defaultvoidaddLast(Ee)

defaultEgetFirst()
defaultEgetLast()

defaultEremoveFirst()
defaultEremoveLast()

SequencedCollectionreversed()

SequencedSet 序列集合

SequencedSetreversed()

SequencedMap 序列映射

defaultMap.EntryfirstEntry()
defaultMap.EntrylastEntry()

defaultMap.EntrypollFirstEntry()
defaultMap.EntrypollLastEntry()

defaultVputFirst(Kk,Vv)
defaultVputLast(Kk,Vv)

SequencedMapreversed()

defaultSequencedSet>sequencedEntrySet()
defaultSequencedSetsequencedKeySet()
defaultSequencedCollectionsequencedValues()

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2966

    瀏覽量

    104700
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1499

    瀏覽量

    61957

原文標(biāo)題:Java集合API的改進(jìn)

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Stream API原理介紹

    Stream APIJava 8 中最重要的新特性之一,它是處理集合和數(shù)組的一種新方式。它提供了一種簡單、靈活和可讀的方式來處理集合和數(shù)組中的元素,從而使代碼更加簡潔、高效和易于
    的頭像 發(fā)表于 09-30 15:31 ?704次閱讀

    java集合干貨系列

    `  前言  Java集合java提供的工具包,包含了常用的數(shù)據(jù)結(jié)構(gòu):集合、鏈表、隊列、棧、數(shù)組、映射等。Java
    發(fā)表于 12-14 15:11

    Java語言的特性介紹

      Java語言的作者們編寫了具有廣泛影響的Java白皮書,里面詳細(xì)地介紹了他們的設(shè)計目標(biāo)以及實現(xiàn)成果,還用簡短的篇幅介紹Java語言的特
    發(fā)表于 01-20 14:44

    詳細(xì)介紹Java泛型、注解、并發(fā)編程

    介紹Java泛型、注解、并發(fā)編程、數(shù)據(jù)傳輸與序列化、高效IO、容器集合、反射與類加載以及JVM重點知識線程、內(nèi)存模型、JVM運行時內(nèi)存、垃圾回收與算法、Java中四種引用類型、GC
    發(fā)表于 08-20 06:09

    如何用java映射創(chuàng)建java對象和調(diào)用java對象呢

    java是一種解析語言,java程序是通過java虛擬機(jī)解析.class的方式運行起來。因此,java中就存在java映射的概念。下面
    發(fā)表于 04-11 14:43

    java項目設(shè)計集合

    java項目設(shè)計集合:Java項目演示.ppt任務(wù)分配.doc項目開發(fā)規(guī)范.doc超市貨物管理.doc項目所涉及的數(shù)據(jù)結(jié)構(gòu).doc需求說明書.doc
    發(fā)表于 05-16 17:54 ?46次下載
    <b class='flag-5'>java</b>項目設(shè)計<b class='flag-5'>集合</b>

    java程序集合1

    java程序集合1 部分代碼如下: create database address;use address;create table book(ID INT(4) AUTO_INCREMENT
    發(fā)表于 04-02 15:01 ?16次下載

    高手總結(jié)java常用API(免費下載)

    高手總結(jié)java常用API(免費下載)。
    發(fā)表于 11-06 11:27 ?0次下載

    使用Java API技巧分析

    本文介紹了一些關(guān)于Java API安全和性能方面的簡單易用的技巧,其中包括保證API Key安全和開發(fā)Web Service方面中在框架方面選擇的一些建議。 程序員都喜歡使用
    發(fā)表于 09-27 14:09 ?3次下載

    JAVA集合類匯總

    多數(shù)情況下使用。 二、層次關(guān)系 如圖所示:圖中,實線邊框的是實現(xiàn)類,折線邊框的是抽象類,而點線邊框的是接口 Collection 接口是集合類的根接口,Java中沒有提供這個接口的直接的實現(xiàn)類。但是卻讓其被繼承產(chǎn)生了兩個接口,就是 Set和List 。
    的頭像 發(fā)表于 01-16 11:50 ?3781次閱讀
    <b class='flag-5'>JAVA</b><b class='flag-5'>集合</b>類匯總

    Java的iterator和foreach遍歷集合源代碼

    Java的iterator和foreach遍歷集合源代碼
    發(fā)表于 03-17 09:16 ?9次下載
    <b class='flag-5'>Java</b>的iterator和foreach遍歷<b class='flag-5'>集合</b>源代碼

    如何利用Stream API來優(yōu)化Java代碼

    使用Stream API優(yōu)化代碼 Java8的新特性主要是Lambda表達(dá)式和流,當(dāng)流和Lambda表達(dá)式結(jié)合起來一起使用時,因為流申明式處理數(shù)據(jù)集合的特點,可以讓代碼變得簡潔易讀 放大招,流
    的頭像 發(fā)表于 07-26 14:30 ?1292次閱讀

    基于Java的接口快速開發(fā)框架——magic-api

    magic-api 是一個基于Java的接口快速開發(fā)框架,編寫接口將通過magic-api提供的UI界面完成,自動映射為HTTP接口,無需定義Controller、Service、Dao、Mapper、XML、VO等
    發(fā)表于 07-19 11:42 ?905次閱讀
    基于<b class='flag-5'>Java</b>的接口快速開發(fā)框架——magic-<b class='flag-5'>api</b>

    OpenVINO? Java API應(yīng)用RT-DETR做目標(biāo)檢測器實戰(zhàn)

    本文將從零開始詳細(xì)介紹環(huán)境搭建的完整步驟,我們基于英特爾開發(fā)套件AIxBoard為硬件基礎(chǔ)實現(xiàn)了Java在Ubuntu 22.04系統(tǒng)上成功使用OpenVINO? Java API,并
    的頭像 發(fā)表于 03-18 15:04 ?793次閱讀
    OpenVINO? <b class='flag-5'>Java</b> <b class='flag-5'>API</b>應(yīng)用RT-DETR做目標(biāo)檢測器實戰(zhàn)

    Java 23功能介紹

    Java 23 包含全新和更新的 Java 語言功能、核心 API 以及 JVM,同時適合新的 Java 開發(fā)者和高級開發(fā)者。從?IntelliJ IDEA 2024.2?開始已支持
    的頭像 發(fā)表于 12-04 10:02 ?193次閱讀
    <b class='flag-5'>Java</b> 23功能<b class='flag-5'>介紹</b>
    RM新时代网站-首页