ArrayList和LinkedList循环遍历效率探索(一)

一、Arraylist的遍历方式效率比较

实验代码:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestListSpeed {

public static void main(String[] args) {
List<Integer> list = new ArrayList<>();

for (int index = 0; index < 10000000; index++) {
list.add(index);
}

long start = System.currentTimeMillis();
for (int index = 0; index < list.size(); index++) {
Integer integer = list.get(index);
}
long end = System.currentTimeMillis();
System.out.println("for循环遍历结果:"+(end - start));

start = System.currentTimeMillis();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Integer integer = (Integer) iterator.next();
}
end = System.currentTimeMillis();
System.out.println("for循环迭代器:"+(end - start));

start = System.currentTimeMillis();
for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
Integer integer = (Integer) iterator.next();
}
end = System.currentTimeMillis();
System.out.println("for循环泛型迭代器:"+(end - start));

start = System.currentTimeMillis();
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer integer = (Integer) iterator.next();
}
end = System.currentTimeMillis();
System.out.println("循环while泛型迭代器:"+(end - start));

start = System.currentTimeMillis();
for (Integer integer : list) {
Integer integer2 = integer;
}
end = System.currentTimeMillis();
System.out.println("foreach迭代:"+(end-start));
}
}

实验6次:结果分别是:

for循环遍历结果:25
for循环迭代器:29
for循环泛型迭代器:26
循环while泛型迭代器:26
foreach迭代:26

for循环遍历结果:23
for循环迭代器:27
for循环泛型迭代器:25
循环while泛型迭代器:24
foreach迭代:26

for循环遍历结果:23
for循环迭代器:27
for循环泛型迭代器:27
循环while泛型迭代器:26
foreach迭代:25

for循环遍历结果:22
for循环迭代器:27
for循环泛型迭代器:25
循环while泛型迭代器:26
foreach迭代:25

for循环遍历结果:24
for循环迭代器:26
for循环泛型迭代器:26
循环while泛型迭代器:24
foreach迭代:25

for循环遍历结果:22
for循环迭代器:28
for循环泛型迭代器:27
循环while泛型迭代器:25
foreach迭代:26

实验结论:

1.Arraylist采用普通for循环遍历速度最快,因为它内部是数组结构;次之,foreach循环,似乎稍微占点优势;再次之,while循环使用迭代器;再次之,for循环使用iterator泛型迭代器;最后,for循环使用iterator没有加泛型的迭代器。

注意:while循环使用迭代器比for循环使用迭代器在速度上似乎占点优势,但是for循环使用迭代器,迭代器在for循环结束后就成为垃圾被垃圾回收器回收,程序负担更小。使用时根据需要使用。

2.数据量较小,遍历速度相差不大。

二、LinkedList遍历方式效率比较

将实验代码替换为Linkedlist,并且将添加中的for循环改为index<100000.

实验结果1:

for循环遍历结果:4508
for循环迭代器:3
for循环泛型迭代器:1
循环while泛型迭代器:1
foreach迭代:1

结论1:使用普通for循环效率极为低下,因为Linkedlist底层不是数组,而是链式结构。

将添加中的for循环恢复为index<10000000。并屏蔽掉普通for循环遍历。

实验结果2:、

for循环迭代器:102
for循环泛型迭代器:102
循环while泛型迭代器:104
foreach迭代:103

for循环迭代器:101
for循环泛型迭代器:105
循环while泛型迭代器:104
foreach迭代:103

for循环迭代器:103
for循环泛型迭代器:103
循环while泛型迭代器:105
foreach迭代:102

for循环迭代器:114
for循环泛型迭代器:114
循环while泛型迭代器:116
foreach迭代:115

for循环迭代器:103
for循环泛型迭代器:102
循环while泛型迭代器:103
foreach迭代:104

for循环迭代器:112
for循环泛型迭代器:113
循环while泛型迭代器:116
foreach迭代:115

结论2:最快,for循环迭代器(iterator未添加泛型)和for循环迭代器(iterator添加了泛型)加上foreach效率差不多;次之,while循环使用迭代器。

三、Arraylist和LinkedList遍历效率比较

绝对推荐Arraylist遍历元素,传说中Arraylist查询快,果然是名不虚传!

原文地址:https://www.cnblogs.com/fatboyfl/p/8277932.html

时间: 2024-09-30 09:33:15

ArrayList和LinkedList循环遍历效率探索(一)的相关文章

ArrayList 和 LinkedList的执行效率比较

一.概念: 一般我们都知道ArrayList* 由一个数组后推得到的 List.作为一个常规用途的对象容器使用,用于替换原先的 Vector.允许我们快速访问元素,但在从列表中部插入和删除元素时,速度却嫌稍慢.一般只应该用ListIterator 对一个 ArrayList 进行向前和向后遍历,不要用它删除和插入元素:与 LinkedList 相比,它的效率要低许多LinkedList 提供优化的顺序访问性能,同时可以高效率地在列表中部进行插入和删除操作.但在进行随机访问时,速度却相当慢,此时应

ArrayList和 LinkedList简单遍历

1 package Arraylist; 2 3 import java.util.List; 4 import java.util.ArrayList; 5 import java.util.LinkedList; 6 7 public class Test { 8 public static void main(String[] args) { 9 Dog dog1=new Dog("mijia",1); 10 Dog dog2=new Dog("q",2);

ArrayList和LinkedList的几种循环遍历方式及性能对比分析

主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论.通过本文你可以了解(1)List的五种遍历方式及各自性能 (2)foreach及Iterator的实现 (3)加深对ArrayList和LinkedList实现的了解.阅读本文前希望你已经了解ArrayList顺序存储和LinkedList链式的结构,本文不对此进行介绍. 相关:HashMap循环遍历方式及其性能对

ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)

主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以了解(1)List的五种遍历方式及各自性能 (2)foreach及Iterator的实现 (3)加深对ArrayList和LinkedList实现的了解. 阅读本文前希望你已经了解ArrayList顺序存储和LinkedList链式的结构,本文不对此进行介绍. 相关:HashMap循环遍历方式及其性

【转】ArrayList和LinkedList的几种循环遍历方式及性能对比分析

原文网址:http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论.通过本文你可以了解(1)List的五种遍历方式及各自性能 (2)foreach及Iterator的实现 (3)加深对ArrayList和LinkedList实现的了解.阅

面试题——ArrayList和LinkedList的区别

List概括 先回顾一下List在Collection的框架图: 从图中可以看出: List是一个接口,他继承Collection接口,代表有序的队列. AbstractList是一个抽象类, ,它继承与AbstractCollection.AbstractList实现了List接口中除了size().get(int location)之外的方法. AbstractSequentialList是一个抽象类,它继承与AbstrctList.AbstractSequentialList实现了"链表中

To Java程序员:切勿用普通for循环遍历LinkedList

ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: public static void main(String[] args) { List<Integer> arrayList = new ArrayList<Integer>(); for (int i = 0; i < 100; i++) arrayList.add(i);

普通for循环遍历LinkedList弊端

java开发过程中,用到的最多的List集合就属ArrayList与LinkedList.对于ArrayList的遍历,通常是下面的方法: public static void main(String[] args) { List<Integer> arrayList = new ArrayList<Integer>(); for (int i = 0; i < 100; i++) arrayList.add(i); for (int i = 0; i < 100; i

To Java程序员:切勿用普通for循环遍历LinkedList(转)

ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: public static void main(String[] args) { List<Integer> arrayList = new ArrayList<Integer>(); for (int i = 0; i < 100; i++) arrayList.add(i);