1. 程式人生 > >java ArrayList 和 LinkedList 原始碼解析比較

java ArrayList 和 LinkedList 原始碼解析比較

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查詢相對較慢,要從頭開始,插入,刪除速度很快