哪个更快 - 在数组末尾或链表中插入元素

Pra*_*hor 2 java arrays linked-list

哪个更快 - 在数组或链表的末尾插入一个元素?

Boh*_*ian 7

我假设你的意思是ArrayList当你说"数组"时,因为在Java中你不能"添加"到一个完整的数组.

首先,如果你"插入到最后",你实际上是在追尾,而不是"插入".这种区别很重要,因为在任意位置插入 ArrayList是O(n)操作,因为右边的所有元素必须沿着一个位置"移位",以便为插入的元素腾出空间.

添加到(尾部)a LinkedList始终是O(1)(恒定时间)操作.

添加到ArrayList通常是O(1)操作,但如果后备阵列已满,则可能是O(n)操作,因为必须分配新数组并复制每个元素.在数组未满的一般情况下,ArrayList的性能(稍微)比LinkedList快,但差异非常小.

两者的摊销成本是相同的,但如果每次都需要恒定时间,则只有LinkedList才能这样做.