Java 初始化arraylist的时间复杂性

Java 初始化arraylist的时间复杂性,java,time-complexity,Java,Time Complexity,初始化arraylist的时间复杂度是多少 Arraylist<E> A = new Arraylist<E> Arraylist A=新的Arraylist 那么: Arraylist<Integer> B = new ArrayList<>(Arrays.asList(1,2,3,4,5) Arraylist B=新的Arraylist(Arrays.asList(1,2,3,4,5) 对于第一个选项,我相信是O(1)恒定时间。但是第二

初始化arraylist的时间复杂度是多少

Arraylist<E> A = new Arraylist<E>
Arraylist A=新的Arraylist
那么:

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

对于第一个选项,我相信是O(1)恒定时间。但是第二个选项是我很难想到的。

数组。asList
-只有这一个将是
O(1)
。在引擎盖下,使用给定数组创建一个新的
数组列表
,无论数组大小如何

或者更简单,无论数组的大小=它是常量,相同的操作总是发生

执行
新建ArrayList(Arrays.asList…
时,它会在内部复制数据:

....
elementData = Arrays.copyOf(elementData, size, Object[].class);
这将最终调用
System::arrayCopy
;这就是它变得棘手的地方。一般来说,这可以被认为是
O(n)
,但由于这是一个本机方法,因此可以作为单个CPU指令来实现;从而成为
O(1)


我仍然会使用
O(n)
作为答案。

数组。asList
-只有这一个将是
O(1)
。在引擎盖下,使用给定数组创建一个新的
数组列表
,无论数组大小如何

或者更简单,无论数组的大小=它是常量,相同的操作总是发生

执行
新建ArrayList(Arrays.asList…
时,它会在内部复制数据:

....
elementData = Arrays.copyOf(elementData, size, Object[].class);
这将最终调用
System::arrayCopy
;这就是它变得棘手的地方。一般来说,这可以被认为是
O(n)
,但由于这是一个本机方法,因此可以作为单个CPU指令来实现;从而成为
O(1)


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

如果基本操作是复制或分配,这可能不是真的。@kelalaka plz也提供了一些细节,我非常渴望阅读其他观点……由于Arraylist的创建和分配是这里的问题,基本操作必须是分配或分配或复制,这取决于方法。否则,可以simp你可以说,与加法等相比,记忆运算是常数。@kelalaka很好的观点!在你看来,它的复杂性是什么?你也可以发布一个答案,非常想阅读它这里有一个加速;,但它仍然是常数。所以(O(n)。如果基本操作是复制或赋值,这可能不是真的。@kelalaka plz也提供了一些细节,我非常渴望阅读其他观点…因为Arraylist的创建和赋值是这里的问题,基本操作必须是分配或赋值或复制,这取决于方法。否则,可以简单地说内存操作与加法等相比,离子是恒定的。@kelalaka很好的观点!在你看来,复杂度会是什么?你也可以发布一个答案,非常想阅读它这里有一个加速;,但它仍然是恒定的。所以(O(n)。