繁体   English   中英

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

[英]What is the time complexity of adding an element at the beginning of an 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

ArrayList文档在这一点上确实模糊不清 - 我刚刚在SE11中对它进行了研究,并且自收集框架的第一个版本(在Java 1.2中)以来它没有改变。

我相信ArrayList文档的作者的意图是指定,在Java的任何实现上,附加操作(即add(E e)方法)必须以恒定的摊销时间运行,并且列表插入操作(即add(int index, E e)方法)必须在O(n)时间内运行,其中n是列表的大小。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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