今天看下簡單集合arraylist與linkedlist的原始碼 並分析其擅長和不擅長的操作。。
上圖是arraylist的成員變數 主要變數elementdata 是底層陣列的體現 ,還有一些初始化陣列的成員變數 在list為空的時候進行初始化使用。
建構函式基本是判斷如果為空就初始化 否則將引數帶進去建立。
這兩個圖是插入元素的操作 比較簡單 就是直接將元素按順序放入陣列,再加長陣列長度。
刪除的方法如果引數是下標 先刪除 將新的陣列賦值 並將舊值返回。
如果引數是物件 那麼就要先遍歷找到第乙個與引數相等的值,將其下標取出並呼叫上面引數為下標的刪除方法。
查詢不言而喻 陣列下表確定 查詢的速度會非常快。
另外還有一些批量刪除的方法,就不在貼了 有興趣的可以自己去看一下。
當新增結點的時候,首先判斷下是不是空的鍊錶 ,尾結點如果為空 說明是空的因為如果不為空一點會有尾結點,然後相應的處理是頭結點指向這個傳進來的結點,即將空鍊錶加入乙個結點。此時的頭結點是有的、
鍊錶詳細見:
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...