在學時還有工作初期,看了市面上的Java教科書發現都沒有深入探討這些List底層與關鍵要素,都只教如何使用。但這個坑常常會在面試或是追蹤效能上體現出自己的不足,所以寫一篇文章鞏固自己的觀念
搞清楚List中ArrayList & LinkedList & Vector
我目前開發最常使用的資料結構,因為ArrayList的方便性可以儲存各種物件。而真的只能用ArrayList去做這些處理嗎?如果遇到瓶頸還有甚麼解決方法呢?
接下來會以下方兩個討論去做比較
    public E get(int index) {
        rangeCheck(index);
        return elementData(index);
    }
    E elementData(int index) {
        return (E) elementData[index];
    }
    public E get(int index) {
        checkElementIndex(index);
        return node(index).item;
    }
        Node<E> node(int index) {
        // assert isElementIndex(index);
        if (index < (size >> 1)) {
            Node<E> x = first;
            for (int i = 0; i < index; i++)
                x = x.next;
            return x;
        } else {
            Node<E> x = last;
            for (int i = size - 1; i > index; i--)
                x = x.prev;
            return x;
        }
    }
Add & Delete
記憶體空間
其實還有許多的差異與使用場景可以去探討,但就等之後如果有遇到或使用到在來補充此文章搂!
https://dotblogs.com.tw/jerryhuang0306/2016/01/30/020303
https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/ArrayList-Grow.md
List & LinkedList
差別
實作
List的底層結構是Object陣列
LinkedList是LinkedList資料結構
所有的 List 都要改為 ArrayList,List 是 interfaceLinkedList 同時也實作 Deque,因此有 poll,offer 等