概述
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è)的聚集地爱榔。"