最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中List、Set、Map的區(qū)別和實(shí)現(xiàn)方式示例代碼

 更新時間:2023年06月19日 09:38:13   作者:daladalabao  
這篇文章主要介紹了Java中List、Set、Map的區(qū)別和實(shí)現(xiàn)方式示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Java中List、Set、Map的區(qū)別和實(shí)現(xiàn)方式

List

  • List 是一個有序的集合,即元素按照插入的順序進(jìn)行排序,可以有重復(fù)的元素。
  • 因?yàn)槭怯行虻模钥梢愿鶕?jù)下標(biāo)來獲取元素或者遍歷整個集合內(nèi)的元素。
  • 常用的實(shí)現(xiàn)類包括 ArrayList 和 LinkedList。

ArrayList

  • 底層是基于數(shù)組實(shí)現(xiàn)的,在內(nèi)部維護(hù)了一個 Object[] 數(shù)組。
  • 當(dāng)需要添加元素時,首先檢查數(shù)組是否已滿,如果未滿,就直接在后面添加元素,否則需要通過擴(kuò)容數(shù)組的方式來增加容量。
  • 由于數(shù)組長度固定且數(shù)組內(nèi)的元素是連續(xù)的,因此查詢某個元素的時間復(fù)雜度為 O(1),而添加或刪除元素的時間復(fù)雜度為 O(n)(需要移動后面的元素)。

LinkedList

  • 底層是基于鏈表實(shí)現(xiàn)的,每個節(jié)點(diǎn)包含一個元素和指向下一個節(jié)點(diǎn)的引用。
  • 當(dāng)需要添加(尾部添加O(1))或刪除(刪除頭結(jié)點(diǎn)或者使用 iterator 的 remove 方法 O(1))元素時,只需要修改相鄰節(jié)點(diǎn)之間的引用,不需要對其他元素進(jìn)行移動。這使得 LinkedList 在添加或刪除元素方面比 ArrayList 更快。
  • 由于沒有連續(xù)的內(nèi)存,并且需要遍歷整個鏈表才能找到指定元素,因此查詢某個元素的時間復(fù)雜度為 O(n),而添加或刪除元素的時間復(fù)雜度為 O(1)。

Set

  • Set 是一個不允許有重復(fù)元素的集合,元素沒有特定的順序。
  • 可以用來判斷某個元素是否在集合¥¥現(xiàn)過。
  • 常用的實(shí)現(xiàn)類包括 HashSet 和 TreeSet。

HashSet

  • 底層是基于 HashMap 來實(shí)現(xiàn)的,內(nèi)部維護(hù)了一個 HashMap 實(shí)例作為其成員變量。
  • 添加元素時,將元素作為 key 存儲在 HashMap 中,value 為一個固定的常量對象。
  • 由于 HashMap 底層使用了哈希表,因此可以快速查找某個元素是否已存在集合中,時間復(fù)雜度為 O(1)。
  • 不保證遍歷順序,也不保證插入順序。

TreeSet

  • 底層是基于紅黑樹實(shí)現(xiàn)的,每個元素都必須實(shí)現(xiàn) Comparable 接口或向構(gòu)造函數(shù)傳遞一個 Comparator 對象。
  • 每個節(jié)點(diǎn)對應(yīng)一個元素,且每個節(jié)點(diǎn)具有以下性質(zhì):
  • 如果一個節(jié)點(diǎn)有左子節(jié)點(diǎn),則左子節(jié)點(diǎn)上的所有元素都比該節(jié)點(diǎn)上的元素?。?/li>
  • 如果一個節(jié)點(diǎn)有右子節(jié)點(diǎn),則右子節(jié)點(diǎn)上的所有元素都比該節(jié)點(diǎn)上的元素大;
  • 左右子樹自身都是一棵二叉搜索樹。
  • 由于 TreeSet 底層采用了紅黑樹,因此平均情況下添加元素、刪除元素、查找元素的時間復(fù)雜度都為 O(logn)。
  • 確保元素按升序排列,或者在創(chuàng)建時通過傳遞 Comparator 實(shí)例來自定義排序方式。

Map

  • Map 是一個鍵值對映射的集合,允許鍵和值都可以為 null,但鍵不能重復(fù),值可以重復(fù)。
  • 可以用于存儲一些關(guān)聯(lián)性比較強(qiáng)的數(shù)據(jù)對象,例如電話簿、字典等。
  • 常用的實(shí)現(xiàn)類包括 HashMap 和 TreeMap。

HashMap

  • 底層也是基于哈希表來實(shí)現(xiàn)的,內(nèi)部維護(hù)了一個數(shù)組,每個元素都是一個鏈表或樹的首節(jié)點(diǎn),用于解決哈希沖突。
  • 添加元素時,會根據(jù) key 的 hash 值進(jìn)行散列,然后找到對應(yīng)的數(shù)組位置,如果該位置上已經(jīng)存在元素,則以鏈表或樹結(jié)構(gòu)的形式將其插入。
  • HashMap 可以快速查找某個 key 對應(yīng)的 value 是否存在集合中,時間復(fù)雜度為 O(1)(如果哈希函數(shù)設(shè)計(jì)得好)。
  • 遍歷順序和插入順序都不保證。

TreeMap

  • 底層是基于紅黑樹實(shí)現(xiàn)的,每個鍵值對都被封裝成一個 Entry 對象,按照鍵的自然順序或指定 Comparator 排序。
  • TreeMap 中的所有元素都保證按照排序規(guī)則排列,在遍歷 TreeMap 時可以獲得有序的鍵值對列表。
  • 添加、刪除、查找元素的時間復(fù)雜度都為 O(logn),其中 n 表示元素個數(shù)。
  • TreeMap 可以自定義排序方式,并且支持限制只允許包含實(shí)現(xiàn)了 Comparable 接口的鍵類型。

總結(jié)

List

List是Java集合框架中最基本和最常用的一種數(shù)據(jù)結(jié)構(gòu),它是有序集合,可以允許重復(fù)的元素。List提供了按照索引來插入、刪除和獲取指定位置上的元素等操作。

Java中List有很多實(shí)現(xiàn)類,比較常用的有:

  • ArrayList:基于數(shù)組實(shí)現(xiàn),以及動態(tài)擴(kuò)容。
  • LinkedList:基于鏈表實(shí)現(xiàn),適合于頻繁添加、刪除元素操作。

Set

Set也是Java集合框架中的一種數(shù)據(jù)結(jié)構(gòu),它是由不同元素組合而成的無序集合,不允許有重復(fù)元素。Set的主要目的是為了消除重復(fù)元素。

Java中Set的實(shí)現(xiàn)類有:

  • HashSet:基于哈希表實(shí)現(xiàn),可快速判斷對象的唯一性。
  • TreeSet:基于紅黑樹實(shí)現(xiàn),可以對元素排序并保證元素唯一性。
  • LinkedHashSet:基于哈希表和鏈表實(shí)現(xiàn),保留插入時順序并保證元素唯一性。

Map

Map也是Java集合框架中最常用的一種數(shù)據(jù)結(jié)構(gòu),它是由鍵值對組成的集合,每個鍵只能出現(xiàn)一次,而且每個鍵只能映射到一個值。

Java中Map有很多實(shí)現(xiàn)類,比較常用的有:

  • HashMap:基于哈希表實(shí)現(xiàn),以鍵值對的形式進(jìn)行存儲和訪問。
  • TreeMap:基于紅黑樹實(shí)現(xiàn),可以對鍵進(jìn)行排序并保證鍵的唯一性。
  • LinkedHashMap:基于哈希表和鏈表實(shí)現(xiàn),按照插入順序維護(hù)元素的次序。

到此這篇關(guān)于Java中List、Set、Map的區(qū)別和實(shí)現(xiàn)方式的文章就介紹到這了,更多相關(guān)java list set map區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot使用RestTemplate的示例詳解

    SpringBoot使用RestTemplate的示例詳解

    RestTemplate繼承自InterceptingHttpAccessor并且實(shí)現(xiàn)了RestOperations接口,其中RestOperations接口定義了基本的RESTful操作,這些操作在RestTemplate中都得到了實(shí)現(xiàn),這篇文章主要介紹了SpringBoot使用RestTemplate,需要的朋友可以參考下
    2023-05-05
  • SpringBoot實(shí)現(xiàn)統(tǒng)一日志上下文的實(shí)戰(zhàn)指南

    SpringBoot實(shí)現(xiàn)統(tǒng)一日志上下文的實(shí)戰(zhàn)指南

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)統(tǒng)一日志上下文的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2026-01-01
  • 淺析java實(shí)現(xiàn)數(shù)據(jù)加密問題

    淺析java實(shí)現(xiàn)數(shù)據(jù)加密問題

    本文通過實(shí)例代碼給大家介紹了java實(shí)現(xiàn)數(shù)據(jù)加密問題,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-11-11
  • Java加密 消息摘要算法MAC實(shí)現(xiàn)詳解

    Java加密 消息摘要算法MAC實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java 消息摘要算法MAC實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Spring?Cloud?中自定義外部化擴(kuò)展機(jī)制原理及實(shí)戰(zhàn)記錄

    Spring?Cloud?中自定義外部化擴(kuò)展機(jī)制原理及實(shí)戰(zhàn)記錄

    這篇文章主要介紹了Spring?Cloud?中自定義外部化擴(kuò)展機(jī)制原理及實(shí)戰(zhàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 通過Java來測試JSON和Protocol Buffer的傳輸文件大小

    通過Java來測試JSON和Protocol Buffer的傳輸文件大小

    這篇文章主要介紹了通過Java來測試JSON和Protocol Buffer的傳輸文件大小,Protocol Buffer(文中簡稱Protobuffer)是谷歌開發(fā)的新的文件傳輸格式,需要的朋友可以參考下
    2015-12-12
  • JavaWeb實(shí)體類轉(zhuǎn)為json對象的實(shí)現(xiàn)方法

    JavaWeb實(shí)體類轉(zhuǎn)為json對象的實(shí)現(xiàn)方法

    這篇文章主要介紹了JavaWeb實(shí)體類轉(zhuǎn)為json對象的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java設(shè)計(jì)模式之構(gòu)建者模式知識總結(jié)

    Java設(shè)計(jì)模式之構(gòu)建者模式知識總結(jié)

    這幾天剛好在復(fù)習(xí)Java的設(shè)計(jì)模式,今天就給小伙伴們?nèi)婵偨Y(jié)一下開發(fā)中最常用的設(shè)計(jì)模式-建造者模式的相關(guān)知識,里面有很詳細(xì)的代碼示例及注釋哦,需要的朋友可以參考下
    2021-05-05
  • JVM如何處理異常深入詳解

    JVM如何處理異常深入詳解

    異常處理的兩大元素:拋出異常、捕獲異常,非正常處理的兩個方法。下面這篇文章主要給大家介紹了關(guān)于JVM如何處理異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2019-01-01
  • Spring Bean生命周期之Bean的實(shí)例化詳解

    Spring Bean生命周期之Bean的實(shí)例化詳解

    這篇文章主要為大家詳細(xì)介紹了Spring Bean生命周期之Bean的實(shí)例化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論

扶沟县| 大渡口区| 福州市| 宾川县| 鄂州市| 清流县| 启东市| 屏东市| 富源县| 丰宁| 广东省| 西盟| 昭觉县| 航空| 大冶市| 鄂托克旗| 淮北市| 贵溪市| 莱州市| 金堂县| 莱芜市| 信丰县| 绍兴县| 濉溪县| 陵川县| 柏乡县| 中西区| 临清市| 临泉县| 嘉荫县| 乌鲁木齐县| 宿迁市| 大英县| 龙井市| 夹江县| 满洲里市| 阳曲县| 手游| 修文县| 介休市| 长泰县|