java資料結構之:ArrayList與LinkedList詳解
前篇博文講到了Java底層怎麼知道ArrayList和LinkedList哪個是隨機訪問哪個是順序訪問的,本片博文主要介紹各自的資料特點。
ArrayList:
從他的這個建構函式我們可以知道他的底層實現就是一個Object物件陣列。
第二個建構函式構造一個空的list預設長度為10
第三個建構函式構造一個包含特定collection集合的list
接下來看一看add方法:
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
ensureCapacityInternal()方法是確保當前資料有位置新增,隨後將資料新增到原元陣列。我們進一步看看ensureCapacityInternal()方法
private void ensureCapacityInternal(int minCapacity) {
ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}
我們先看方法calculateCapacity()方法
LinkedList
它裡面內建了一個類(node)資料結構。
private static class Node {
E item;
Node next;
Node prev;
Node(Node prev, E element, Node next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
我們說linkedlist的底層結構實際是一個雙向連結串列。從node結構我們可以看出他有前向“指標”和後向“指標”和元素。接下來我們來trace一下該結構的增刪改查。
add:
public boolean add(E e) {
linkLast(e);
return true;
}
1、linkLast() 新增到末尾(尾插)。
前向“指標”為尾節點,後項“指標”為空