【发布时间】:2015-09-15 23:24:52
【问题描述】:
我正在尝试找出这两种方法在时间复杂度上的区别:
public ArrayList<Integer> populateList(int n){
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0; i< n; i++)
list.add(0, i);
return list;
}
public ArrayList<Integer> populateList(int n){
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0; i< n; i++)
list.add(i);
return list;
}
我知道 big-o 是根据最坏情况定义的,添加到数组列表的最坏情况涉及调整大小,从而将所有元素复制到新数组中。我认为方法 2 将是 O(n^2) 因为对于数组中的每个元素,您可能必须将所有元素复制到一个更大的数组中。
但我不确定方法 1,因为我不确定事情的完成顺序。似乎可以组合复制元素和插入新元素,这样您就不必先将旧元素添加到更大的列表中,然后在添加新元素时根据需要移动所有元素。如果是这样的话,方法 1 似乎是 O(n^2) 而不是 O(n^3)。但这就是它的工作原理吗?
【问题讨论】:
标签: java arraylist time-complexity add