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

时间:2018-10-02 20:23:54

标签: java time-complexity

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

Arraylist<E> A = new Arraylist<E>

那又怎么样:

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

对于第一种选择,我相信它将是O(1)恒定时间。但是第二种选择是我很难考虑的。

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)作为答案。