arraylist與linkedlist的區別
arraylist和linkedlist的大致區別如下:
1.arraylist是實現了基於動態陣列的資料結構,linkedlist基於鍊錶的資料結構。
2.對於隨機訪問get和set,arraylist覺得優於linkedlist,因為linkedlist要移動指標。
3.對於新增和刪除操作add和remove,linedlist比較佔優勢,因為arraylist要移動資料。
arraylistmlist = new arraylist();
建立arraylist物件
/*** constructs a new
instance with zero initial capacity.
*/public arraylist() .
** @param object
* the object to add.
* @return always true
*/@override public boolean add(e object)
a[s] = object;
size = s + 1;
modcount++;
return true;
只要arraylist的當前容量足夠大,add()操作的效率非常高的。只有當arraylist對容量的需求超出當前陣列大小時,才需要進行擴容。擴容的過程中,會進行大量的陣列複製操作。
增加元素到任意位置
@override public void add(int index, e object)
if (s < a.length) else
a[index] = object;
size = s + 1;
modcount++;
}arraylist插入任意位置時,
@override public e remove(int index)
@suppresswarnings("unchecked") e result = (e) a[index];
system.arraycopy(a, index + 1, a, index, --s - index);//陣列重組,效率低
a[s] = null; // prevent memory leak
size = s;
modcount++;
return result;
}刪除元素
@override public e remove(int index)
@suppresswarnings("unchecked") e result = (e) a[index];
system.arraycopy(a, index + 1, a, index, --s - index);//刪除元素也是陣列重組,效率較低,尤其是index靠前時
a[s] = null; // prevent memory leak
size = s;
modcount++;
return result;
}容量引數
arraylist容量引數比較重要,合理的設定容量引數,可以減少陣列擴容的次數,從而提高效能
隨機訪問 通過資料,效率高
@suppresswarnings("unchecked") @override public e get(int index)
return (e) array[index];
}linkedlistmlist = new linkedlist();
內部維護了鍊錶
public linkedlist()
private static final class link
}增加元素 鍊錶操作,新增到鍊錶末尾
@override
public boolean add(e object)
private boolean addlastimpl(e object)
隨機新增元素
@override
public void add(int location, e object)
} else
}linkprevious = link.previous;
linknewlink = new link(object, previous, link);//鍊錶操作,效率高
previous.next = newlink;
link.previous = newlink;
size++;
modcount++;
} else
}刪除元素 remove 鍊錶操作
@override
public e remove(int location)
} else
}linkprevious = link.previous;
linknext = link.next;
previous.next = next;
next.previous = previous;
size--;
modcount++;
return link.data;
}throw new indexoutofbound***ception();
}@override
public boolean remove(object object)
隨機訪問 需要遍歷 效率較低
@override
public e get(int location)
} else
}return link.data;
}throw new indexoutofbound***ception();
}
LinkedList與ArrayList的區別
我們依然從資料結構的角度看度這個問題。從命名上可以大致猜出來linkedlist的資料結構為鍊錶,arraylist的資料結構為陣列。能夠看到這裡它們的區別就一目了然了 它們的區別大致就和陣列和鍊錶的區別是一樣的。在在查詢和刪除操作中陣列的速度要優於鍊錶,這是因為陣列是按照下標來執行這兩個操作的,而...
ArrayList與LinkedList的區別
關於兩者的區別,先通過兩者對資料的操作進行對比 public static void main string args end system.currenttimemillis system.out.println arraylist第一次插入資料前後時間差 end start linkedlist...
ArrayList 與LinkedList 的區別
arraylist實現了list介面,它是以陣列的方式來實現的,陣列的特性是可以使用索引的方式來快速定位物件的位置,因此對於快速的隨機取得物件的需求,使用arraylist實現執行效率上會比較好.linkedlist是採用鍊錶的方式來實現list介面的,它本身有自己特定的方法,如 addfirst ...