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

java源碼----集合系列1----ArrayList,linkedList

這篇具有很好參考價(jià)值的文章主要介紹了java源碼----集合系列1----ArrayList,linkedList。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Arraylist

基礎(chǔ)信息

底層是一個(gè)object數(shù)組

Arraylist 是java里面Collection? 標(biāo)準(zhǔn)的一個(gè)集合,其底層是一個(gè)object數(shù)組。當(dāng)new一個(gè)空參的ArrayList的時(shí)候,會(huì)默認(rèn)生成一個(gè)空數(shù)組。

java源碼----集合系列1----ArrayList,linkedList

java源碼----集合系列1----ArrayList,linkedList

Arraylist上限是 Integer.MAX_VALUE - 8(Integer.MAX_VALUE? = ?2^31-1);

超過上限會(huì)報(bào)內(nèi)存溢出

java源碼----集合系列1----ArrayList,linkedList

這里為什么是Integer.MAX_VALUE-8? ,源碼上的解釋就一句話?

Some VMs reserve some header words in an array

?一些虛擬機(jī)會(huì)在數(shù)組中保留一些頭字。解釋起來就是:

Java對(duì)象在堆內(nèi)存中的存儲(chǔ)布局可以分為三部分:對(duì)象頭(object header),實(shí)例數(shù)據(jù)(Instance Data)和對(duì)齊填充(Padding);

對(duì)象頭包括

Mark Word:用于對(duì)象自身的運(yùn)行時(shí)數(shù)據(jù)存儲(chǔ),如HashCode,GC分代年齡,鎖狀態(tài)標(biāo)志,線程持有的鎖,偏向線程ID和偏向時(shí)間戳等;
Klass Pointer:對(duì)象指向它類元數(shù)據(jù)的指針,JVM通過這個(gè)指針長度來確定對(duì)象是哪個(gè)類的實(shí)例。
數(shù)組長度(只有數(shù)組對(duì)象才有):記錄數(shù)組對(duì)象的長度。

java源碼----集合系列1----ArrayList,linkedList?

8 bytes(Mark Word的最大占用) + 8 bytes(Klass Pointer的最大占用) + 4 bytes(數(shù)組長度)+ 8 bytes(引用指針的最大占用:數(shù)組中存放的是對(duì)象的引用) + 4 bytes(padding:為了方便尋址,JVM要求對(duì)象大小要求是8的倍數(shù),不夠就填充) ==32 bytes

? 而int類型? 1位占4個(gè)byte, 8 int(整數(shù)) 就等于32 bytes(字節(jié)),所以是Integer.MAX_VALUE-8。但在實(shí)際使用時(shí)因?yàn)榭紤]到虛擬機(jī)堆大小,實(shí)際arraylist大小要遠(yuǎn)遠(yuǎn)小于Integer.MAX_VALUE-8 。

ArrayList? 默認(rèn)長度是10,使用Arrays.copyOf()進(jìn)行擴(kuò)容,每次=擴(kuò)容size是 原size的一半??(oldCapacity + (oldCapacity >> 1));

java源碼----集合系列1----ArrayList,linkedList

?Arrays.copyOf()源碼其實(shí)是調(diào)用了System.arraycopy?

java源碼----集合系列1----ArrayList,linkedList

?System.arraycopy 是原生方法。

public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);

相當(dāng)于新建了一個(gè)空數(shù)組,再用原生方法把老數(shù)組的值復(fù)制進(jìn)去。從這一點(diǎn)可以看出ArrayList每次擴(kuò)容都需要?jiǎng)?chuàng)建新的數(shù)組,并且將原數(shù)組的值復(fù)制進(jìn)新的數(shù)組,新增的速度相對(duì)要慢。

查詢的時(shí)候先校驗(yàn)是否存在數(shù)組下標(biāo)越界

java源碼----集合系列1----ArrayList,linkedList

然后從數(shù)組中獲取

java源碼----集合系列1----ArrayList,linkedList

LinkeList

LinkeList底層是個(gè)鏈表文章來源地址http://www.zghlxwxcb.cn/news/detail-438425.html

到了這里,關(guān)于java源碼----集合系列1----ArrayList,linkedList的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • java 數(shù)據(jù)結(jié)構(gòu) ArrayList源碼底層 LinkedList 底層源碼 迭代器底層

    java 數(shù)據(jù)結(jié)構(gòu) ArrayList源碼底層 LinkedList 底層源碼 迭代器底層

    對(duì)于數(shù)據(jù)結(jié)構(gòu)我這邊只告訴你右邊框框里的 棧的特點(diǎn):后進(jìn)先出,先進(jìn)后出,入棧也成為壓棧,出棧也成為彈棧 棧就像一個(gè)彈夾 隊(duì)列先進(jìn)先出后進(jìn)后出 隊(duì)列像排隊(duì) 鏈表查詢滿 但是增刪快(相對(duì)于數(shù)組而言) 拓展:還有一個(gè)雙向鏈表 他在查詢?cè)氐臅r(shí)候更快些,因?yàn)樗谀玫揭粋€(gè)元素

    2024年02月05日
    瀏覽(25)
  • Javat集合之Lis---(ArrayList和LinkedList)

    Javat集合之Lis---(ArrayList和LinkedList)

    提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 List是一種常用的集合類型,它可以存儲(chǔ)任意類型的對(duì)象,也可以結(jié)合泛型來存儲(chǔ)具體的類型對(duì)象, 本質(zhì)上就是一個(gè)容器。 ArrayList和LinkedList通用方法: 以上方法通用且常用的方法其他方法可參考相關(guān)的文檔進(jìn)行查詢即可,

    2024年01月24日
    瀏覽(29)
  • 【List】List集合有序測試案例:ArrayList,LinkedList,Vector(123)

    List是有序、可重復(fù)的容器。 有序: List中每個(gè)元素都有索引標(biāo)記。可以根據(jù)元素的索引標(biāo)記(在List中的位置)訪問 元素,從而精確控制這些元素。 可重復(fù): List允許加入重復(fù)的元素。更確切地講,List通常允許滿足 e1.equals(e2) 的元素重復(fù)加入容器。 List接口常用的實(shí)現(xiàn)類有3個(gè):

    2024年02月11日
    瀏覽(19)
  • Java集合框架之ArrayList源碼分析

    ArrayList是Java提供的線性集合,本篇筆記將從源碼(java SE 17)的角度學(xué)習(xí)ArrayList: 什么是ArrayList? ArrayList底層數(shù)據(jù)結(jié)構(gòu)是怎么實(shí)現(xiàn)的? 作為一個(gè)容器,分析增刪改查的過程 ArrayList的擴(kuò)容機(jī)制 由ArrayList的定義可知,ArrayList繼承了AbstractList抽象類,實(shí)現(xiàn)了List、RandomAccess、Cloneabl

    2024年02月07日
    瀏覽(22)
  • Java 集合中 ArrayList 的擴(kuò)容機(jī)制原理(面試+讀源碼)

    Java 集合中 ArrayList 的擴(kuò)容機(jī)制原理(面試+讀源碼)

    ? ?????????在 Java 中,ArrayList 內(nèi)部是通過一個(gè)數(shù)組來存儲(chǔ)元素的,是一個(gè)數(shù)組結(jié)構(gòu)的存儲(chǔ)容器。當(dāng)向一個(gè) ArrayList 中添加元素時(shí),如果當(dāng)前數(shù)組已經(jīng)滿了,就需要擴(kuò)容。? ? ? ? ? 集合的繼承關(guān)系圖? ( ArrayList 的擴(kuò)容機(jī)制原理?)? ????????面試官好,ArrayList 是一個(gè)數(shù)

    2024年02月07日
    瀏覽(26)
  • java面試基礎(chǔ) -- ArrayList 和 LinkedList有什么區(qū)別, ArrayList和Vector呢?

    java面試基礎(chǔ) -- ArrayList 和 LinkedList有什么區(qū)別, ArrayList和Vector呢?

    目錄 基本介紹 有什么不同?? ArrayList的擴(kuò)容機(jī)制 ArrayLIst的基本使用 ArrayList和Vector 還記得我們的java集合框架嗎, 我們來復(fù)習(xí)一下, 如圖: ? ? ? ? ?可以看出來 ArrayList和LinkedList 都是具體類, 他們都是接口List的實(shí)現(xiàn)類. 但是他們底層的邏輯是不同的, 相信學(xué)過這個(gè)的應(yīng)該大概有個(gè)

    2024年02月12日
    瀏覽(22)
  • Java鏈?zhǔn)酱鎯?chǔ)LinkedList----與ArrayList比較

    Java鏈?zhǔn)酱鎯?chǔ)LinkedList----與ArrayList比較

    作為一名對(duì)技術(shù)充滿熱情的學(xué)習(xí)者,我一直以來都深刻地體會(huì)到知識(shí)的廣度和深度。在這個(gè)不斷演變的數(shù)字時(shí)代,我遠(yuǎn)非專家,而是一位不斷追求進(jìn)步的旅行者。通過這篇博客,我想分享我在某個(gè)領(lǐng)域的學(xué)習(xí)經(jīng)驗(yàn),與大家共同探討、共同成長。請(qǐng)大家以開放的心態(tài)閱讀,相信

    2024年01月23日
    瀏覽(21)
  • Java ArrayList 與 LinkedList 的靈活選擇

    Java ArrayList 類是一個(gè)可變大小的數(shù)組,位于 java.util 包中。 for 循環(huán): for-each 循環(huán): ArrayList 是 Java 中常用的數(shù)據(jù)結(jié)構(gòu),它可以存儲(chǔ)各種類型的數(shù)據(jù),并且可以根據(jù)需要調(diào)整大小。 ArrayList 的優(yōu)勢: 可變大小 可以存儲(chǔ)各種類型的數(shù)據(jù) 提供多種方法來訪問、修改和刪除元素 可以使用

    2024年03月09日
    瀏覽(25)
  • 【java】LinkedList 和 ArrayList的簡介與對(duì)比

    【java】LinkedList 和 ArrayList的簡介與對(duì)比

    Java LinkedList和 ArrayList 在使用上,幾乎是一樣的。由于LinkedList是基于雙向鏈表的,會(huì)多出list.getFirst();獲取頭部元素等方法 鏈表(Linked list)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會(huì)按線性的順序存儲(chǔ)數(shù)據(jù),而是在每一個(gè)節(jié)點(diǎn)里存到下一個(gè)節(jié)點(diǎn)的地址。 鏈表可

    2024年02月11日
    瀏覽(22)
  • java面試基礎(chǔ) -- ArrayList 和 LinkedList有什么區(qū)別

    java面試基礎(chǔ) -- ArrayList 和 LinkedList有什么區(qū)別

    目錄 基本介紹 有什么不同?? ArrayList的擴(kuò)容機(jī)制 ArrayLIst的基本使用 ArrayList和Vector 還記得我們的java集合框架嗎, 我們來復(fù)習(xí)一下, 如圖: ? ? ? ? ?可以看出來 ArrayList和LinkedList 都是具體類, 他們都是接口List的實(shí)現(xiàn)類. 但是他們底層的邏輯是不同的, 相信學(xué)過這個(gè)的應(yīng)該大概有個(gè)

    2024年02月12日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包