arraylist是執行緒不安全的
public
boolean
add(e e)
為什麼arraylist還要實現randomaccess介面?randomaccess介面實際上就是乙個標識,它代表著arraylist是支援快速訪問功能的
arraylist的底層實現是object陣列,所以add(e e)方法的時間複雜度是o(1)
如果是add(int index, e e)時間複雜度就是o(n - i),因為要把後面的元素往後移一位
因為是陣列實現的 所以arraylist支援快速訪問 get(int index)
arraylist和vector相比,vector是執行緒安全的 但是同樣也導致執行緒訪問vector會在同步上花費大量時間
與arraylist對應的就是linkedlist
linkedlist同樣是執行緒不安全的
public
boolean
add(e e)
看原始碼可知,這裡沒有對多執行緒做任何預防
linkedlist的底層是雙向鍊錶實現的,所以新增刪除的時間複雜度是o(1),而帶index的新增則為o(n),因為要移動到這個位置,
linkedlist是不支援快速訪問的,鍊錶嘛
和arraylist不一樣,陣列實現的話需要預留很多多餘的空間,但是鍊錶除了本身的大小其他沒有多餘空間浪費
本文由部落格一文多發平台 openwrite 發布!
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...