初始化数组列表的时间复杂度是多少?
Arraylist<E> A = new Arraylist<E>
那又怎么样:
Arraylist<Integer> B = new ArrayList<>(Arrays.asList(1,2,3,4,5)
对于第一种选择,我相信它将是O(1)恒定时间。但是第二种选择是我很难考虑的。
答案 0 :(得分:2)
Arrays.asList
-仅此一个就是O(1)
。在幕后,将使用给定的数组创建一个新的ArrayList
-与数组的大小无关。
或更简单的是,无论数组的大小为常数,始终都会执行相同的操作。
执行new ArrayList(Arrays.asList...)
后,它会在内部复制数据:
....
elementData = Arrays.copyOf(elementData, size, Object[].class);
将最终调用System::arrayCopy
;这就是棘手的地方。通常,可以将其视为O(n)
,但是由于这是一种本机方法,因此可以实现为单个CPU指令;因此成为O(1)
。
我仍然会选择O(n)
作为答案。