java ArrayList 和 LinkedList 原始碼解析比較
阿新 • • 發佈:2018-12-28
ArrayList 的底層資料結構是 陣列
在做插入時如果 陣列長度不夠 就要擴容 ,按照1.5的比例擴容的,擴容需要重新建立陣列,比較慢
//這就是 ArrayList真正存放 物件的地方 private transient Object[] elementData; private void grow(int minCapacity) { int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }
//插入和刪除都很簡單,很快 ,
Linked的資料結構,這是它的內部類,也就是每個物件存在這個弄得裡面
transient Node<E> first; /** * Pointer to last node. * Invariant: (first == null && last == null) || * (last.next == null && last.item != null) */ transient Node<E> last; private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
比較ArrayList和LinkedList的 優缺點
ArrayList 根據index查詢得到物件速度很快,因為是陣列,插入和刪除 就比較慢了每次都要檢查容量,需要佔用的記憶體也比較大
LinkedList採用連結串列的方式 ,一個接著另一個的方式,根據index查詢相對較慢,要從頭開始,插入,刪除速度很快