【问题标题】:Is it more efficient to remove elements from an ArrayList or a LinkedList?从 ArrayList 或 LinkedList 中删除元素是否更有效?
【发布时间】:2010-11-05 07:50:54
【问题描述】:

理论上,从ArrayListLinkedList 中删除元素更有效吗?

【问题讨论】:

  • 这真的应该改写。诸如“从 ArrayList 或 LinkedList 中删除元素是否更有效?”理论与它无关,“更容易”只是误导。
  • Johanna,请定义您所说的“更容易”是什么意思。程序员更容易还是 CPU 效率更高?

标签: java arraylist linked-list


【解决方案1】:

ArrayList 在内部使用动态数组来存储元素,因此可以使用 ArrayList 很慢,因为它在内部使用了一个数组。

如果从数组中删除任何元素,则所有位都会在内存中移动,而 LinkedList 在内部使用双向链表来存储元素。

LinkedList 的操作比 ArrayList 快,因为它使用双向链表,因此不需要在内存中进行位移。

【讨论】:

    【解决方案2】:

    嗯,从(双向)列表中删除一个元素是 O(1)。但是从数组中移除需要将剩余的元素在数组中向下移动一个空格,即 O(n)。

    也就是说,通过索引获取列表中的特定元素是 O(n),而通过索引获取数组中的特定元素是 O(1)。

    所以,对于实际删除,LinkedList 会更好。有更多关于 Array 与 LinkedList here 的信息。

    【讨论】:

    • 请注意linkedList.remove(100)是O(n)。
    【解决方案3】:

    LinkedList 中删除它们“更容易”(即更有效),因为从ArrayList 中删除需要将所有后续元素移动到列表中的新位置——数组的所有后续元素必须分配一个新值。对于链表,只有一个指针(或两个,对于双向链表)必须重新分配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 2013-02-24
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      相关资源
      最近更新 更多