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() 新增到末尾(尾插)。 前向“指標”為尾節點,後項“指標”為空