阅读完[问题]:When to use LinkedList over ArrayList?后,我尝试对ArrayList和LinkedList的性能进行基准测试。但我发现的结果与答案截然不同。就add()而言,ArrayList性能比LinkedList好2-3倍。 据我所知 LinkedList.add(E元素)是O(1)< --- LinkedList的主要好处 ArrayList.add(E元素)是O(n - 索引) 但结果表明,Array列表比LinkedList快得多
任何人都可以解释一下这种行为
public static void main(String[] args) {
long start = System.currentTimeMillis();
List<Integer> b = new LinkedList<Integer>();
for (int i = 0; i < 1000000; i++) {
b.add(i);
}
System.out.println(System.currentTimeMillis() - start);
start = System.currentTimeMillis();
List<Integer> a = new ArrayList<Integer>();
for (int i = 0; i < 1000000; i++) {
a.add(i);
}
System.out.println(System.currentTimeMillis() - start);
}
答案 0 :(得分:0)
ArrayList的唯一例外情况是当达到列表的容量时,会强制ArrayList实例化一个新数组并将所有元素从旧数组复制到新数组。但这很少发生,因为每次完成时容量乘以1.5。
在两种情况下,在列表中间添加元素是O(N)。 LinkedList必须迭代(从结束开始),直到找到必须插入新节点的位置。 ArrayList必须将所有元素从插入索引移到结尾。
答案 1 :(得分:0)
您只测试列表的append
属性。
ArrayList
和LinkedList
是列表的具体实现。在一天结束时,您的基准目的是确定哪种列表更适合哪种情况。这就是 有效基准 尝试针对all the new operations and stipulations provided by the List interface测试两种实现的原因。