简体   繁体   中英

Is it more efficient to remove elements from an ArrayList or a LinkedList?

从理论上讲,从ArrayListLinkedList删除元素是否更有效?

It is "easier" (that is, more efficient) to remove them from a LinkedList , because removal from an ArrayList requires moving all subsequent elements to a new position in the list—all subsequent elements of the array must be assigned a new value. With a linked list, only one pointer (or two, with a doubly-linked list) must be re-assigned.

Well, removal of an element from a (doubly-linked-)list is O(1). But removal from an array will require that the remaining elements are shifted down one space in the array, which is O(n).

That said, getting a specific element in a list by index is O(n), while getting a specific element in an array by index is O(1).

So, the for actual removal, LinkedList will be better. There is more info on Array's versus LinkedList here .

ArrayList internally uses a dynamic array to store the elements so manipulation with ArrayList is slow because it internally uses an array.

If any element is removed from the array, all the bits are shifted in memory while LinkedList internally uses a doubly linked list to store the elements.

Manipulation with LinkedList is faster than ArrayList because it uses a doubly linked list, so no bit shifting is required in memory.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM