Java集合之ArrayList源碼分析

概述

ArrayList可以理解為動態(tài)數(shù)組, 根據(jù)MSDN的說法, 就是Array的復雜版本. 與數(shù)組相比, 它的容量能動態(tài)增長. ArrayList是List接口的可變數(shù)組的實現(xiàn). 實現(xiàn)了所有可選列表操作, 允許包括null在內(nèi)的所有元素.

數(shù)組的特點, 查詢快增刪慢.

每個ArrayList實例都有一個容量, 該容量是指向用來存儲列表元素的數(shù)組大小. 隨著向ArrayList中不斷添加元素, 其容量也自動增長, 自動增長會帶來數(shù)據(jù)向新數(shù)組的重新拷貝, 因此, 如果可預知數(shù)據(jù)量的多少, 可在構造ArrayList時指定其容量. 在添加大量元素前, 應用程序也可以使用 ensureCapacity 方法來增加ArrayList實例的容量, 可以減少遞增式再分配的數(shù)量.

注意: ArrayList不是線程安全的.

ArrayList原理

ArrayList實現(xiàn)了List接口呀癣、底層使用數(shù)組保存所有元素, 其操作基本上是對數(shù)組的操作.

ArrayList繼承了AbstractList, 實現(xiàn)了List. 它是一個數(shù)組, 提供了相關的添加甜滨、刪除港华、修改恐锣、遍歷等.

ArrayList實現(xiàn)了RandmoAccess接口, 即提供了隨機訪問功能. RandmoAccess是java中用來被List實現(xiàn)的, 為List提供快速訪問功能的. 在ArrayList中, 可以通過元素的序號快速獲取元素對象, 這就是快速隨機訪問.

ArrayList實現(xiàn)了Cloneable接口, 即覆蓋了函數(shù)clone(), 能被克隆.

ArrayList實現(xiàn)java.io.Serizlizable接口, 這意味著ArrayList支持序列化, 能通過序列化去傳輸.

1.ArrayLIst底層用數(shù)組實現(xiàn)

其他字段:

2.構造函數(shù)

3.存儲

ArrayList提供了多種添加元素的方法.

(1)add(E e)方法, 將指定元素添加到列表的尾部. 當容量不足時, 調用 grow 增長容量.

可以看到, 方法核心內(nèi)容就是 ensureCapacityInternal 方法. 用于調整數(shù)組容量, 這個函數(shù)就是 自動擴容機制的核心. 其實現(xiàn)如下:

也就是說, 當增加數(shù)據(jù)時, 若ArrayList大小不夠了, 那么將數(shù)組擴容為原來的1.5倍.

(2)add(int, E)在指定位置插入元素

(3)set(int, E)將指定位置的元素替換, 返回舊的元素的值

(4)addAll(Collection)將指定Collection中的元素添加到末尾

(5)addAll(int, Collection)將指定Collection中的元素添加到指定位置

方法基本都大同小異, 重要的就是為數(shù)組擴容

4.讀取

讀取的方法就比較簡單了, ArrayList 能夠支持隨機訪問的原因也是很顯然的, 因為它內(nèi)部的數(shù)據(jù)結構是數(shù)組, 而數(shù)組本身就是支持隨機訪問

5.刪除

(1)remove(int)刪除指定下標的元素并返回

(2)remove(Object)刪除指定的元素, 返回是否成功(布爾值)

刪除數(shù)組中的元素, 會將元素后面的所有元素向左移動一個位置.

6.調整數(shù)組容量

ensureCapacity 方法用于調整數(shù)組的容量

每天都在分享文章从祝,也每天都有人想要我出來給大家分享下怎么去學習Java错邦。大家都知道,我們是學Java全棧的家坎,大家就肯定以為我有全套的Java系統(tǒng)教程嘱能。沒錯吝梅,我是有Java全套系統(tǒng)教程,進扣裙【47】974【9726】所示惹骂,進群的時候記得表明自己想要學習什么苏携,不要用小號,這樣小編才好給你們發(fā)定向資源对粪,今天小編就免費送!~

后記:對于大部分轉行的人來說右冻,找機會把自己的基礎知識補齊,邊工作邊補基礎知識著拭,真心很重要纱扭。“我們相信人人都可以成為一個程序員茫死,現(xiàn)在開始跪但,找個師兄,帶你入門峦萎,學習的路上不再迷茫屡久。這里是ja+va修真院,初學者轉行到互聯(lián)網(wǎng)行業(yè)的聚集地爱榔。"

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末被环,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子详幽,更是在濱河造成了極大的恐慌筛欢,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唇聘,死亡現(xiàn)場離奇詭異版姑,居然都是意外死亡,警方通過查閱死者的電腦和手機迟郎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門剥险,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宪肖,你說我怎么就攤上這事表制。” “怎么了控乾?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵么介,是天一觀的道長。 經(jīng)常有香客問我蜕衡,道長壤短,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮久脯,結果婚禮上蒜绽,老公的妹妹穿的比我還像新娘。我一直安慰自己桶现,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布鼎姊。 她就那樣靜靜地躺著骡和,像睡著了一般。 火紅的嫁衣襯著肌膚如雪相寇。 梳的紋絲不亂的頭發(fā)上慰于,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音唤衫,去河邊找鬼婆赠。 笑死,一個胖子當著我的面吹牛佳励,可吹牛的內(nèi)容都是我干的休里。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼赃承,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起铡羡,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤民假,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抓于,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體做粤,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年捉撮,在試婚紗的時候發(fā)現(xiàn)自己被綠了怕品。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡呕缭,死狀恐怖堵泽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恢总,我是刑警寧澤迎罗,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站片仿,受9級特大地震影響纹安,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一厢岂、第九天 我趴在偏房一處隱蔽的房頂上張望光督。 院中可真熱鬧,春花似錦塔粒、人聲如沸结借。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽船老。三九已至,卻和暖如春圃酵,著一層夾襖步出監(jiān)牢的瞬間柳畔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工郭赐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留薪韩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓捌锭,卻偏偏與公主長得像俘陷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子观谦,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容