ArrayList Vs LinkedList
我关注了之前的一篇文章,上面写着:
对于链接列表
- get 是 O(n)
- 添加为 O(1)
- 删除是 O(n)
- Iterator.remove is O(1)
对于数组列表
- get 是 O(1)
- add 是 O(1) 摊销的,但 O(n) 最坏情况是,因为数组必须调整大小和复制
- 删除是 O(n)
因此,通过查看此内容,我得出的结论是,如果我必须在集合中对5000000个元素进行顺序插入,则会超过类。LinkedList
ArrayList
而且,如果我必须通过迭代从集合中获取元素,即不抓取中间的元素,仍然会超越class。LinkedList
ArrayList
现在为了验证我的上述两个陈述,我写了下面的示例程序...但我感到惊讶的是,我的上述陈述被证明是错误的。
ArrayList
在这两种情况下都已超越。与从集合中添加和获取它们相比,它花费的时间更少。是我做错了什么,或者关于大小为5000000的集合的初始陈述和不适用于?Linkedlist
LinkedList
LinkedList
ArrayList
我提到了大小,因为如果我将元素的数量减少到50000,性能更好,并且初始语句成立。LinkedList
long nano1 = System.nanoTime();
List<Integer> arr = new ArrayList();
for (int i = 0; i < 5000000; i++) {
arr.add(i);
}
System.out.println(System.nanoTime() - nano1);
for (int j : arr) {
// Do nothing
}
System.out.println(System.nanoTime() - nano1);
long nano2 = System.nanoTime();
List<Integer> arrL = new LinkedList();
for (int i = 0; i < 5000000; i++) {
arrL.add(i);
}
System.out.println(System.nanoTime() - nano2);
for (int j : arrL) {
// Do nothing
}
System.out.println(System.nanoTime() - nano2);