ArrayList和linkedList知識收藏

2021-09-25 15:35:56 字數 1539 閱讀 9728

arraylist和linkedlist是對list介面的不同資料結構的實現。它們都是執行緒不安全的,執行緒不安全往往出現在陣列的擴容、資料新增的時候

一、arraylist和linkedlist是什麼?

arraylist:arraylist是list介面的可變陣列的實現。

linkedlist:linkedlist是list介面的(雙向)鍊錶實現。

二.arraylist為什麼查詢速度快,增刪速度慢?

①arraylist查詢效率高:arraylist是連續存放元素的,找到第乙個元素的首位址,再加上每個元素的佔據的位元組大小就能定位到對應的元素。

②linkedlist插入刪除效率高。因為執行插入刪除操作時,只需要操作引用即可,元素不需要移動元素,他們分布在記憶體的不同地方,通過引用來互相關聯起來。而arraylist需要移動元素,故效率低。

三.倆個list的資料結構

arraylist:

儲存arraylist使用陣列(elememntdata)儲存資料,預設構造方法建立arraylist時,會初始化乙個空陣列。

擴容arraylist使用陣列儲存資料,因此在新增資料的時候需要做容量檢查,如果容量不足則需要進行擴容。

其新容量大小公式為:新容量=舊容量+舊容量/2

四.關於list的迭代器與for迴圈的見解

通常會對list進行遍歷,常見的兩種遍歷方式為for迴圈和迭代器iterator。

在記憶體中用來記錄資料的儲存方式有兩種(此處不考慮map),一種為順序(即陣列)儲存形式,一種為鍊錶的儲存形式:

①對於順序儲存形式,採用下標的形式來找到對應的記錄;

②對於鍊錶儲存形式,則是必須根據鍊錶的指向一條一條的來定位資料;

對於list集合

list下面有幾個常用的實現類如:arraylist , linkedlist與vector。

其中,arraylist 與 vector 的儲存形式為陣列,linkedlist則是取用的鍊錶的結構。

從理論上來講,arraylist 與 vector的遍歷使用for迴圈效率高,linkedlist用iterator效率高

public static void main(string args)   

string str = "";

long start = system.currenttimemillis();

iteratorit = stringlist.iterator();

while(it.hasnext())

start = system.currenttimemillis();

int length = stringlist.size();

for(int i = 0 ; i < length ; i++)

}

結果:

而在linkedlist下:

iterator的效率是for迴圈的百倍不止.

Array List和ArrayList的區別與

定義 public abstract class array icloneable,ilist,icollection,ienumerable,istructuralcomparable,istructuraequatable 陣列在記憶體中是連續儲存的,所以它的索引速度是非常的快,而且賦值與修改元...

LinkedList和ArrayList的區別

對於集合collection下的list介面,有兩個實現類,arraylist和linkedlist,那麼他們兩個有什麼區別呢。arraylist的底層由陣列實現,而linkedlist的底層由雙向鍊錶實現,底層的不同才是他們區別的根源。然而因為他們繼承於同乙個父介面,他們的很多方法都是相同的。關於...

ArrayList和LinkedList的面試題

一 arraylist為什麼是執行緒不安全的?arraylist在新增乙個元素的時候,它可能會有兩步來完成 1.在 items size 的位置存放此元素 2.增大 size 的值。在單執行緒執行的情況下,如果 size 0,新增乙個元素後,此元素在位置 0,而且 size 1 而如果是在多執行緒情...