从理论上讲,从ArrayList
或LinkedList
删除元素会更有效吗?
答案 0 :(得分:10)
从LinkedList
删除它们会“更容易”(也就是更有效),因为从ArrayList
删除需要将所有后续元素移动到列表中的新位置 - 所有后续必须为数组的元素分配新值。使用链表时,只能重新分配一个指针(或两个带有双向链表的指针)。
答案 1 :(得分:5)
好吧,从(双重链接)列表中删除元素是O(1)。但是从数组中删除将需要将剩余的元素向下移动到数组中的一个空格,即O(n)。
也就是说,按索引获取列表中的特定元素是O(n),而按索引获取数组中的特定元素是O(1)。
所以,对于实际删除,LinkedList会更好。关于Array与LinkedList here的更多信息。
答案 2 :(得分:2)
ArrayList 在内部使用动态数组存储元素,因此可以使用 ArrayList很慢,因为它在内部使用数组。
如果从数组中删除了任何元素,则所有位都会在内存中移位,而 LinkedList 内部使用双向链接列表来存储元素。
使用LinkedList进行操作要比ArrayList快,因为它使用了双向链接列表,因此内存中不需要移位。