Java集合 ArrayList集合

2021-09-20 12:52:46 字數 1524 閱讀 4544

以陣列實現。節約空間,但是陣列有容量限制。超出限制時會增加50%容量,用system.arraycopy()複製到新的陣列,因此最好能給出陣列大小的預估值。預設第一次插入元素時建立大小為10 的陣列。

按照陣列下標來訪問元素——get(i)/set(i,e)的效能很高,這是陣列的基本優勢。

直接在陣列末尾加入元素——add(e)的效能也很高,但是如果按下標出入、刪除元素——add(i,e),remove(i),remove(e),則要用system.arraycopy()來移動不放呢受影響的元素,效能也就變差了,這是基本劣勢。

arraylist是乙個相對來說比較簡單的資料結構,最重要的就是可以自動擴容,也就是一種「動態陣列」。下面是一段簡單實現:

arraylistlist = new arraylist();

list.add("語文: 99");

list.add("數學: 98");

list.add("英語: 100");

list.remove(0);

在執行這四條語句時,會發生這樣的變化:

其中,add操作可以理解為直接將陣列的內容置位,remove操作可以理解為刪除index為0的節點,並將後面的元素移到0處。

當我們在arraylist中增加元素的時候,會使用add函式。將元素放至末尾,具體的實現如下:

public boolean add(e e)
在實現中最核心的內容就是ensurecapacityinternal。這個函式其實就是自動擴容機制的核心。看一下其具體實現:

private void ensurecapacityinternal(int mincapacity) 

ensureexplicitcapacity(mincapacity);

}private void ensureexplicitcapacity(int mincapacity)

private void grow(int mincapacity)

也就是,當增加資料的時候,如果arraylist的大小不能滿足需求的時候,那麼就將陣列變為原來的1.5倍,之後的操作就是將老的陣列copy到新的陣列中。例如:預設的陣列大小是10,也就是當我們add10個元素之後,再進行一次add時,就會發生自動擴容,陣列長度由原來的10 變成了15。

array的set和get函式,先做index檢查,然後執行賦值或者訪問操作

public e set(int index,e element)

public e get(int index)

public e remove(int index)

Java基礎 集合ArrayList

集合類 物件導向類,對事物的描述都是通過物件實現。為方便對多個物件進行操作,必須對多個物件進行儲存,因此需要容器類。容器類特點是長度可變。stringbuilder只能存放字串。int等陣列雖能存放自定義型別,但長度固定。arraylist是一種特殊的資料型別,泛型。arraylist 構造乙個初始...

Java學習筆記 集合Arraylist

arraylist集合 arraylist list new arraylist 可以使object型也可以是類。通過例子說明arraylist的使用方法 arraylist list new arraylist list.add i 向list中新增乙個值object型的i值,list.add i...

Java集合 ArrayList 實現原理

1.arraylist概述 arraylist是list介面的可變陣列的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。除了實現 list 介面外,此類還提供一些方法來操作內部用來儲存列表的陣列的大小。每個arraylist例項都有乙個容量,該容量是指用來儲存列表元素的陣列的大小...