list實現類的區別

2021-10-07 17:11:58 字數 1190 閱讀 9559

1、arraylist

非執行緒安全

基於物件陣列

get(int index)不需要遍歷陣列,速度快;

iterator()方法中呼叫了get(int index),所以速度也快

set(int index, e e)不需要遍歷陣列,速度快

add方法需要考慮擴容與陣列複製問題,速度慢

remove(object o)需要遍歷陣列,並複製陣列元素,速度慢

remove(int index)不需要遍歷陣列,需要複製陣列元素,但不常用

contain(e)需要遍歷陣列

2、linkedlist

非執行緒安全

基於環形雙向鍊錶

get(int index)需要遍歷鍊錶,速度慢;

iterator()方法中呼叫了get(int index),所以速度也慢

set(int index, e e)方法中呼叫了get(int index),所以速度也慢

add方法不需要考慮擴容與陣列複製問題,只需建立新物件,再將新物件的前後節點的指標指向重新分配一下就好,速度快

remove(object o)需要遍歷鍊錶,但不需要複製元素,只需將所要刪除的物件的前後節點的指標指向重新分配一下以及將所要刪除的物件的三個屬性置空即可,速度快

remove(int index)需要遍歷鍊錶,但不需要複製元素,只需將所要刪除的物件的前後節點的指標指向重新分配一下以及將所要刪除的物件的三個屬性置空即可,但不常用

contain(e)需要遍歷鍊錶

3、vector(執行緒安全的arraylist)

執行緒安全

擴容機制與arraylist不同

4、stack(繼承於vector)

執行緒安全

效率低下,可採用雙端佇列deque或linkedlist來實現,deque用的較多

總結:在查詢(get)、遍歷(iterator)、修改(set)使用的比較多的情況下,用arraylist

在增加(add)、刪除(remove)使用比較多的情況下,用linkedlist

在需要執行緒安全而且對效率要求比較低的情況下,使用vector,當然,實現arraylist執行緒安全的方法也有很多,以後再說

在需要使用棧結構的情況下,使用deque,stack廢棄就行了

免費領取驗證碼、內容安全、簡訊傳送、直播點播體驗包及雲伺服器等**

更多網易技術、產品、運營經驗分享。

List的主要實現類

arraylist list的主要實現類 list中相對於collection,新增加的方法 void add int index,object ele 在指定的索引位置index新增元素ele boolean addall int index,collection eles object get ...

List常見實現類

原始碼分析 default capacity 10 預設容量 注意 沒有向集合中新增任何元素時,容量為0 新增了元素的話,預設容量則為10 每次擴容大小是原來的1.5倍 elementdata 存放元素的陣列 size 實際的元素個數 add 新增元素public boolean add e e p...

list 模板類的簡單實現

最近學資料結構,於是嘗試著去實現了乙個 list 類,發現確實有很多問題,特別是類的繼承這一塊,有些問題搞不懂 這個 list 類只是乙個簡單的實現,只提供了基本的功能,也沒有邊界檢測什麼的,越界訪問的問題由使用者自己把握 很多功能都是沒有實現的,總得來說這是乙個比較裸的 list 模板類,沒有什麼...