我想比較一下用Iterator、for語句、foreach來遍歷LinkedList,誰的速度快。因而寫了以下代碼:java
package mystudy; import java.util.*; public class MyStudy { private static final int SIZE = 100000; private Integer[] arr = new Integer[SIZE]; private AbstractList<Integer> absList; public void initialize(){ LinkedList<Integer> list = new LinkedList<Integer>(); for (int i = 0; i < SIZE; i ++){ arr[i] = i; list.add(i); } absList = (AbstractList<Integer>)list.subList(0, list.size()); } public void method0(){ Integer tmp; for (int i = SIZE - 1; i >= 0; i --){ tmp = arr[i]; } } public void method1(){ ListIterator<Integer> it = absList.listIterator(SIZE); Integer tmp; while(it.hasPrevious()){ tmp = it.previous(); } } public void method2(){ Integer tmp; for (int i = SIZE - 1; i >= 0; i --){ tmp = absList.get(i); } } public void method3(){ Integer tmp; for(Integer i : absList){ tmp = i; } } public static void main(String[] args){ MyStudy study = new MyStudy(); study.initialize(); long start,expend0,expend1,expend2,expend3; start = System.currentTimeMillis(); study.method0(); expend0 = System.currentTimeMillis() - start; start = System.currentTimeMillis(); study.method1(); expend1 = System.currentTimeMillis() - start; start = System.currentTimeMillis(); study.method2(); expend2 = System.currentTimeMillis() - start; start = System.currentTimeMillis(); study.method3(); expend3 = System.currentTimeMillis() - start; System.out.println("expend0:" + expend0 + " expend1:" + expend1 + " expend2:" + expend2 + " expend3:" + expend3); } }
運行的結果:code
expend0:1 expend1:7 expend2:5548 expend3:7get
可見用for語句遍歷LinkedList是最慢的。
it