ArrayList與LinkedList常見的問題

2021-10-01 12:49:36 字數 1513 閱讀 4825

question1: 常見的list類有哪些,它們分別有什麼區別?

答:常見的有arraylist,vector,linkedlist等。arraylist底層是陣列組成,vector是執行緒安全的arraylist類。linkedlist底層是由鍊錶組成。arraylist與vector的區別,擴容上面arraylist是擴容1.5倍,而vector是擴容兩倍。vector是執行緒安全的使用synchronized關鍵字來保證執行緒安全,但是效率更低。

question2: arraylist是如何增加容量的?

答:當存入資料到arraylist中去的時候,都需要檢查容量是否夠,如果夠的話,直接存入即可。如果不夠的話,就會啟動擴容機制,首先擴容至原容量的1.5倍大小,判斷是否足夠,如果不夠就按照當前的容量擴容。當前的容量需要判斷是否小於最大的容量(integer.max_value-8),如果不小於,則擴容至最大的容量,integer的最大值。

question3:arraylist和linkedlist在實際應用中應該如何選擇?

答:arraylist實現了randomaccess介面,支援快速隨機訪問,訪問的速度很快,而arraylist在增加和刪除元素的時候,每次增加或者刪除乙個元素,由於是陣列實現的,所有的資料都需要移動n次(就是用system.arraycopy實現的),這是一種極為消耗資源的操作。但是linkedlist就不同,linkedlist底層是鍊錶實現的,增加和刪除元素較快,查詢的話比較慢。所以一般在實際應用中,如果涉及到大量的查詢的話,使用arraylist,涉及到大量的增刪操作的話,建議使用linkedlist。

arraylist與linkedlist都允許儲存null也允許儲存重複元素。不要使用for迴圈遍歷linkedlist,效率很低。

question5: arrays.aslist之後獲得的集合能夠擴容嗎?

答:不能擴容,因為這樣獲取到的乙個集合是final的。所以不能夠擴容或者修改

private

final

e a;

arraylist(e array)

question6:linkedlist與arrayslist對比有哪些不足?

答:除了查詢比較慢之外,在linkedlist中每個元素都存有乙個向前的指標和乙個向後的引用,更占用記憶體。

question7:陣列array與arraylist有什麼區別,分別適用什麼場景?

答:array是長度不能改變的陣列,arraylist是長度可以改變的陣列,array中可以儲存基本型別和物件,arraylist中只能儲存物件。如果知道陣列容量的大小可以使用array,如果不知道容量的話,可以使用arraylist。

LinkedList與ArrayList的區別

我們依然從資料結構的角度看度這個問題。從命名上可以大致猜出來linkedlist的資料結構為鍊錶,arraylist的資料結構為陣列。能夠看到這裡它們的區別就一目了然了 它們的區別大致就和陣列和鍊錶的區別是一樣的。在在查詢和刪除操作中陣列的速度要優於鍊錶,這是因為陣列是按照下標來執行這兩個操作的,而...

ArrayList與LinkedList的區別

arraylist與linkedlist的區別 arraylist和linkedlist的大致區別如下 1.arraylist是實現了基於動態陣列的資料結構,linkedlist基於鍊錶的資料結構。2.對於隨機訪問get和set,arraylist覺得優於linkedlist,因為linkedlis...

ArrayList與LinkedList的區別

關於兩者的區別,先通過兩者對資料的操作進行對比 public static void main string args end system.currenttimemillis system.out.println arraylist第一次插入資料前後時間差 end start linkedlist...