亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中集合底層原理分析

發布時間:2021-05-28 09:39:21 來源:億速云 閱讀:176 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Java中集合底層原理分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一、Collection集合

Java中集合底層原理分析

Collection接口是單列集合類的父接口,這種集合可以將數據一個一個的存放到集合中。它有兩個重要的子接口,分別是 java.util.List 和 java.util.Set

二、List接口

1、特點

  •  List是一種有序的集合

  • List是一種帶索引的集合

  • List是一種可以存放重復數據的集合

2、List接口三個主要實現類

Java中集合底層原理分析

3、【面試題】ArrayList、LinkedList、Vector的區別

①ArrayList:線程不安全,查詢效率高,插入、刪除效率低;底層使用數組存儲;
②LinkedList:對于頻繁的插入、刪除操作效率比ArrayList高,但是查詢效率低;底層使用雙向鏈表;
③Vector:線程安全,查詢效率高,插入、刪除效率低;底層使用數組存儲;

源碼分析:ArrayList

jdk7

創建對象時底層會創建一個長度為10的數組,默認情況下,擴容為原來的1.5倍,同時將數組復制到新數組中。

jkd8

創建對象時底層不會創建長度為10的數組,而是等到有數據添加進來時才創建。(節約空間,提高效率)

Vector

jdk7和8中創建對象時,底層都創建了長度為10的數組,擴容為原來的2倍

三、Set(Set底層是由Map實現的,所以一般都是問Map)

1、特點

能存儲無序、不可重復的元素。
底層:數組+鏈表

2、無序性

無序性:不等于隨機性。存儲的數據在底層數組中并非照數組索引的順序添加,而是根據數據的哈希值決定的。

3、不可重復性

保證添加的元素照equals()判斷時,不能返回true.即:相同的元素只能添加一個。

四、Map

1、特點

無序的,不可重復的,由K-V鍵值對組成。

2、HashMap的源碼分析

  • jdk7

在創建對象之后,底層會創建長度為16的一維數組Entry,當元素個數超過加載因子乘以數組長度時,并且當前添加元素發生了碰撞,就會進行擴容,擴容為原來的2倍,并復制到新數組中

  • jdk8

在創建對象之后底層沒有創建長度為16的數組;
首次添加元素時才創建長度為16的數組
jkd8中數Node[],jdk7時Entry[](就只有名字不同)
jdk7底層是數組+鏈表;而jdk8中是數組+鏈表+紅黑樹
形成鏈表時,jdk7是新元素指向舊元素;jdk8是舊元素指向新元素(防止高并發造成的死循環)
當鏈表長度大于8并且數組長度大于64時,才會變成紅黑樹(提高查找效率)

3、LinkedHashMap

繼承于HashMap,用于實現LUR算法

4、Hashtable

線程安全的,k-v都不能為空。
創建對象時默認為11,擴容為原來的2倍加1

關于“Java中集合底層原理分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仁布县| 新平| 徐闻县| 乾安县| 靖边县| 景德镇市| 石家庄市| 屯门区| 蒲城县| 南川市| 绵阳市| 如东县| 临漳县| 镇沅| 新蔡县| 茂名市| 观塘区| 屯留县| 曲阜市| 南昌市| 固镇县| 景泰县| 北京市| 阿图什市| 扎赉特旗| 陈巴尔虎旗| 甘谷县| 昭通市| 钦州市| 麻城市| 肥东县| 喀喇沁旗| 长阳| 桂阳县| 靖安县| 沈阳市| 遵义市| 淳安县| 甘洛县| 广平县| 五大连池市|