ArrayList與LinkedList的區別

2021-08-03 20:42:09 字數 2851 閱讀 5783

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 ...