国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

集合List和Map

這篇具有很好參考價值的文章主要介紹了集合List和Map。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Java集合框架體系

集合List和Map,Java面經(jīng),算法

ArrayList底層的實現(xiàn)原理

初始化后ArrayList添加元素的步驟

首先計算數(shù)組的容量,如果當(dāng)前數(shù)組已使用長度+1后的大于當(dāng)前的數(shù)組長度,則調(diào)用grow方法擴容(原來的1.5倍),確保新增的數(shù)據(jù)有地方存儲之后,則添加元素到size的位置上。返回添加成功布爾值。

ArrayList list=new ArrayList(10)中的list擴容幾次

集合List和Map,Java面經(jīng),算法

數(shù)組與List之間的轉(zhuǎn)換

集合List和Map,Java面經(jīng),算法

用Arrays.asList轉(zhuǎn)List后,如果修改了數(shù)組內(nèi)容,list受影響嗎List用toArray轉(zhuǎn)數(shù)組后,如果修改了List內(nèi)容,數(shù)組受影響嗎?

用Arrays.asList轉(zhuǎn)List后,如果修改了數(shù)組內(nèi)容,list會受影響,因為在集合的構(gòu)造器中,數(shù)組和List集合指向同一個地址。

List用toArray轉(zhuǎn)數(shù)組后,如果修改了List內(nèi)容,數(shù)組不受影響,因為底層他是數(shù)組的拷貝,跟原來的元素就沒關(guān)系了。

鏈表

單向鏈表和雙向鏈表的區(qū)別

單向鏈表只有一個方向,結(jié)點只有后繼指針next。

雙向鏈表有兩個方向,結(jié)點有后繼指針next和前驅(qū)指針prev。

鏈表操作數(shù)據(jù)的時間復(fù)雜度多少

集合List和Map,Java面經(jīng),算法

ArrayList和LinkedList的區(qū)別是什么

1、底層數(shù)據(jù)結(jié)構(gòu):ArrayList是動態(tài)數(shù)組實現(xiàn)的,更節(jié)省空間,LinkedList是雙向鏈表實現(xiàn)的,更占用內(nèi)存。

2、操作數(shù)據(jù)的效率:

查找效率,LinkedList的時間復(fù)雜度是O(n),對于ArrayList,給定下標的時間復(fù)雜度是O(1),下標未知的時間復(fù)雜度是O(n)。

插入刪除效率,對于LinkedList,在首尾的效率為O(1),其他位置是O(n),對于ArrayList,首部的效率為O(1),其他位置是O(n)。

3、線程安全:

ArrayList和LinkedList都不是線程安全的。

有兩種方法使其線程安全:

第一種:在方法內(nèi)部使用,局部變量則是線程安全的。

第二種:將其轉(zhuǎn)換為線程安全的集合。集合List和Map,Java面經(jīng),算法

HashMap常用api

mp.put("one",1); //存放鍵值對

mp.get("one"); //通過鍵取值,輸出 1

mp.containsKey("one")); //HashMap中是否包含該鍵

mp.containsValue(1)); //HashMap中是否包含該值

mp.isEmpty()); //判斷是否為空

mp.size()); //輸出 HasMap 的長度

mp.values());//輸出所有值

mp.keySet());//輸出所有鍵

mp.entrySet());//輸出所有鍵和值

HashMap實現(xiàn)原理

HashMap的jdk1.7和jdk1.8的區(qū)別

jdk1.7的HashMap采用數(shù)組加鏈表的方式。jdk1.8的HashMap采用數(shù)組加鏈表加紅黑樹的方式。當(dāng)數(shù)組長度大于64并且鏈表長度大于8時,鏈表轉(zhuǎn)換為紅黑樹。

HashMap的put方法的具體流程

  1. 首先,put方法接收兩個參數(shù):鍵(key)和值(value)。根據(jù)鍵的哈希值,確定要將鍵值對插入到HashMap的哪個桶(bucket)中。

  2. 如果要插入的桶為空,直接將鍵值對作為新的桶節(jié)點插入該位置即可。

  3. 如果要插入的桶不為空,即發(fā)生了哈希沖突,根據(jù)鍵的哈希值和equals方法進行比較來判斷鍵是否已經(jīng)存在于桶中。

  4. 如果存在相同的鍵,則更新對應(yīng)鍵的值為新的值。

  5. 如果不存在相同的鍵,則將新的鍵值對作為桶的新節(jié)點插入到鏈表的頭部或紅黑樹中。

  6. 插入完成后,如果數(shù)組長度大于64并且鏈表長度大于8時,鏈表轉(zhuǎn)換為紅黑樹,以提高查詢效率。

  7. 最后,如果插入操作導(dǎo)致HashMap的大小超過了負載因子(通常為0.75)乘以容量的閾值,就會觸發(fā)擴容操作,重新調(diào)整HashMap的容量,以保持較低的哈希沖突率。

HashMap的擴容機制

  1. 當(dāng)HashMap中存儲的元素數(shù)量達到負載因子(load factor)乘以當(dāng)前容量的閾值時,就會觸發(fā)擴容操作。擴容時,HashMap會創(chuàng)建一個新的桶數(shù)組,其容量是舊數(shù)組的兩倍。

  2. 接下來,HashMap會遍歷原來的桶數(shù)組中的每個桶,并將桶中的元素重新分配到新的桶數(shù)組中的相應(yīng)位置。重新分配的過程會根據(jù)鍵的哈希值重新計算桶的位置。

  3. 在重新分配元素的過程中,如果原來的桶中只有一個元素,那么該元素可以直接放入新的桶中。如果原來的桶中有多個元素,會涉及到鏈表或紅黑樹的重組操作,以保持元素在新的桶中的相對順序。

  4. 擴容完成后,HashMap的容量就會更新為新的容量,并且新的桶數(shù)組會取代原來的桶數(shù)組成為HashMap的內(nèi)部存儲結(jié)構(gòu)。文章來源地址http://www.zghlxwxcb.cn/news/detail-545253.html

到了這里,關(guān)于集合List和Map的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Java 集合框架API接口】Collection,List,Set,Map,Queue,Deque

    【Java 集合框架API接口】Collection,List,Set,Map,Queue,Deque

    博主: _LJaXi Or 東方幻想郷 專欄: Java | 從跨行業(yè)到跨平臺 開發(fā)工具: IntelliJ IDEA 2021.1.3 Java集合API提供了一組功能強大的數(shù)據(jù)結(jié)構(gòu)和算法, 具有以下作用( 簡述 ) 存儲和組織數(shù)據(jù) 提供高效的數(shù)據(jù)訪問和操作 實現(xiàn)算法和數(shù)據(jù)處理 提供線程安全性 支持泛型編程 java.util.Collection

    2024年02月12日
    瀏覽(32)
  • 【JAVA】集合與背后的邏輯框架,包裝類,List,Map,Set,靜態(tài)內(nèi)部類

    【JAVA】集合與背后的邏輯框架,包裝類,List,Map,Set,靜態(tài)內(nèi)部類

    ?? Author: 老九 ?? 個人博客:老九的CSDN博客 ?? 個人名言:不可控之事 樂觀面對 ?? 系列專欄: Collection 接口,在 Java 當(dāng)中,Collection 也是重要的數(shù)據(jù)結(jié)構(gòu)。 在創(chuàng)建 Collection 的時候,要 通過 new 來使用。但是查看 Collection 源碼的時候, 發(fā)現(xiàn) Collecting 是一個接口

    2024年02月07日
    瀏覽(57)
  • Java中用Stream流對List對象集合轉(zhuǎn)Map時key值重復(fù)的操作

    看完你還不懂,你直接噴·· 定義: 1.List是一個裝Dto對象的集合 2.Dto里面有ID屬性,name屬性等等 3.Dto里面的ID會重復(fù) ?現(xiàn)在要把List轉(zhuǎn)成以ID為key值的map,明顯key不能重復(fù)啊,所以應(yīng)該怎么操作呢? (需要你有java8Stream流的基本概念,map的基本概念) ? 操作1:重復(fù)key,選擇保留

    2024年01月18日
    瀏覽(92)
  • 使用java8 新特性stream流對List<Map<String, Object>>集合進行遍歷、過濾、查詢、去重、排序、分組

    對于一個ListMapString, Object類型的數(shù)據(jù),可以使用Java 8的新特性stream流來進行遍歷、過濾、查詢、去重、排序、分組等操作。 遍歷: 過濾: 查詢: 去重: 排序: 分組:

    2024年02月10日
    瀏覽(106)
  • 集合List和Map

    集合List和Map

    初始化后ArrayList添加元素的步驟 首先計算數(shù)組的容量,如果當(dāng)前數(shù)組已使用長度+1后的大于當(dāng)前的數(shù)組長度,則調(diào)用grow方法擴容(原來的1.5倍),確保新增的數(shù)據(jù)有地方存儲之后,則添加元素到size的位置上。返回添加成功布爾值。 用Arrays.asList轉(zhuǎn)List后,如果修改了數(shù)組內(nèi)容,

    2024年02月13日
    瀏覽(17)
  • 【Java練習(xí)題匯總】《第一行代碼JAVA》網(wǎng)絡(luò)編程篇&集合體系篇&JDBC篇,匯總Java練習(xí)題——Socket 與ServerSocket、List和Set、Map~

    【Java練習(xí)題匯總】《第一行代碼JAVA》網(wǎng)絡(luò)編程篇&集合體系篇&JDBC篇,匯總Java練習(xí)題——Socket 與ServerSocket、List和Set、Map~

    一、填空題 在類集中存放單值的最大父接口是___________ ,存放一對值的最大父接口是___________ 。 ___________ 接口保存的數(shù)據(jù)是不允許重復(fù)的,并且___________ 子類是可以排序的,根據(jù)___________ 排序。 Java 類集可以使用的輸出方式是___________ 、___________ 、___________ 和___________ 。 在

    2024年02月13日
    瀏覽(28)
  • SpringMVC 的參數(shù)綁定之list集合、Map

    SpringMVC 的參數(shù)綁定之list集合、Map

    標簽中name屬性的值就是pojo類的屬性名 參數(shù)綁定4 list [對象] form action=\\\"teaupd.do\\\" method=\\\"post\\\" ?? ?c:forEach items=\\\"${list}\\\" var=\\\"tea\\\" varStatus =\\\"status\\\" ?? ??? ?教師編號:input type=\\\"text\\\" name=\\\"teas[${status.index}].teaid\\\" value=\\\"${tea.teaid}\\\"br/ ?? ??? ?教師姓名:input type=\\\"text\\\" name=\\\"teas[${status.index}]

    2024年02月22日
    瀏覽(21)
  • 判斷List、Map集合是否為空的方法

    1.判斷List集合是否為空 1.1List集合已經(jīng)完成初始化? 這里的List集合已經(jīng)完成了初始化操作,相當(dāng)于是一個瓶子可以裝水了,但是此時還沒有水。? 控制臺輸出:List is empty. ?1.2List集合未完成初始化? 這里的List集合,還沒有進行初始化,相當(dāng)于瓶子還不存在,用list.isEmpty()會產(chǎn)

    2024年02月15日
    瀏覽(29)
  • postman傳參之List<Map<String,Object>>后臺是map的集合

    postman傳參之List<Map<String,Object>>后臺是map的集合

    1.控制層 ? 2.業(yè)務(wù)層接口 ? 3.業(yè)務(wù)層實現(xiàn)類 ? 4.mapper ? 5.xml ? 6.運行結(jié)果 ? 7.postman傳參格式 [{\\\"id\\\":127,\\\"age\\\":12,\\\"name\\\":30},{\\\"id\\\":232,\\\"age\\\":12,\\\"name\\\":30}]?

    2023年04月20日
    瀏覽(26)
  • Map,List,Set 等集合以及底層數(shù)據(jù)結(jié)構(gòu)

    Map,List,Set 等集合以及底層數(shù)據(jù)結(jié)構(gòu)

    集合類存放于java.util包中。集合類存放的都是對象的引用,而非對象本身。常見的集合主要有三種——Set(集)、List(列表)和Map(映射)。其中,List和Set 都 實現(xiàn) 了 Collection 接口,并且List和Set也是接口,而 Map 為獨立接口 。常見的實現(xiàn)類如下: List 的實現(xiàn)類有:ArrayList、

    2024年02月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包