java - 初始化数组列表的时间复杂度

标签 java time-complexity

初始化数组列表的时间复杂度是多少?

Arraylist<E> A = new Arraylist<E>

关于:

Arraylist<Integer> B = new ArrayList<>(Arrays.asList(1,2,3,4,5)

对于第一个选项,我相信这将是 O(1) 常数时间。然而,第二个选择是我很难想到的。

最佳答案

Arrays.asList - 仅此一个将是O(1)。在底层,一个新的 ArrayList 是用给定的数组创建的 - 无论数组的大小如何。

或者更简单,无论数组的大小如何,相同的操作总是发生=它是恒定的。

当您执行new ArrayList(Arrays.asList...)时,它会在内部复制数据:

....
elementData = Arrays.copyOf(elementData, size, Object[].class);

最终将调用System::arrayCopy;这就是棘手的地方。一般来说,这可以被认为是O(n),但由于这是一个 native 方法,因此可以作为单个 CPU 指令来实现;从而变成O(1)

我仍然会选择O(n)作为答案。

关于java - 初始化数组列表的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52615883/

相关文章:

java - 从 UTF8 格式 URL 文本中获取数据

java - 如何在 log4j.xml 中对收件人隐藏发件人电子邮件地址?

algorithm - 对三角形列表进行排序的最小交换次数

java - 算法复杂度分析

algorithm - 具有 i 的乘法增量的循环的复杂性/大 theta

java - 如何为 java 创建一个像控制台一样的 gui

Java 文档签名身份验证

java - 上下文无法解析

c++ - 在 C/C++ 中查找字符串中具有任意字符顺序的子字符串

algorithm - 当维基百科说在动态数组末尾插入一个项目的复杂性是 O(1) 摊销时,它是什么意思?