在ArrayList的开头添加元素的时间复杂度是多少?

假设我在这个数组中有一个带有n个元素的ArrayList,我在开头添加了一个元素:

myArrayList.add(0,'some value'); 

这次行动的时间复杂程度是多少?

Java Doc没有指定这一点。

我刚开始学习Java,我看到了句子

 An ArrayList in Java is a List that is backed by an array. 

这里’支持’是什么意思? 谢谢!

将元素添加到数组的开头是O(n) – 它需要将所有现有元素移位一个位置。

数组列表中的所有元素都存储在一个连续的数组中。 如果添加的元素多于数组的当前大小 – 它将自动生成以适应新元素。

最后,O(1)在多次插入时摊销。

ArrayList.add(0, element)占用线性时间,但常量非常低,因为它可以使用超快的System.arraycopy

  • 从头开始构建列表并在开头添加大量元素以二次时间运行:O(n 2 )。
  • 将所有元素添加到列表末尾然后调用Collections.reverse(list)以线性时间运行:O(n)。