我們都知道ArrayList和LinkedList的大致區別:
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。
ArrayList和LinkedList在性能上各有優缺點:
1.對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對ArrayList而言,主要是在內部數組中增加一項,指向所添加的元素,偶爾可能會導致對數組重新進行分配;而對LinkedList而言,這個開銷是統一的,分配一個內部Entry對象。
2.在ArrayList的中間插入或刪除一個元素意味着這個列表中剩余的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。
3.LinkedList不支持高效的隨機元素訪問。
4.ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間
當操作是在一列數據的后面添加數據而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;當你的操作是在一列數據的前面或中間添加或刪除數據,並且按照順序訪問其中的元素時,就應該使用LinkedList了。
tips:
ArrayList 是線性表(數組)
get() 直接讀取第幾個下標,復雜度 O(1)
add(E) 添加元素,直接在后面添加,復雜度O(1)
add(index, E) 添加元素,在第幾個元素后面插入,后面的元素需要向后移動,復雜度O(n)
remove()刪除元素,后面的元素需要逐個移動,復雜度O(n)
LinkedList 是鏈表的操作
get() 獲取第幾個元素,依次遍歷,復雜度O(n)
add(E) 添加到末尾,復雜度O(1)
add(index, E) 添加第幾個元素后,需要先查找到第幾個元素,直接指針指向操作,復雜度O(n)
remove()刪除元素,直接指針指向操作,復雜度O(1)