JAva List遍歴性能比較

12041 ワード

一、テストコード
public class ListPerformanceTest {
    public static void main(String[] args) {
        List<Integer> arrayList = new ArrayList<>();
        List<Integer> linkedList = new LinkedList<>();
        for (int i = 0; i < 1000000; ++i) {
            arrayList.add(i);
            linkedList.add(i);
        }
        test1(arrayList);
        test2(arrayList);
        test3(arrayList);

        test1(linkedList);
        test2(linkedList);
        test3(linkedList);
    }
    //for    
    public static void test1(List<Integer> list) {
        long start = System.currentTimeMillis();
        for (int i = 0; i < list.size(); ++i) {
            int num = list.get(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("test1 : " + (end - start));
    }
    //iterator  
    public static void test2(List<Integer> list) {
        long start = System.currentTimeMillis();
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            int num = (Integer) iterator.next();
        }
        long end = System.currentTimeMillis();
        System.out.println("test2 : " + (end - start));
    }
    //for each  
    public static void test3(List<Integer> list) {
        long start = System.currentTimeMillis();
        for (Integer integer : list) {
            int num = integer;
        }
        long end = System.currentTimeMillis();
        System.out.println("test3 : " + (end - start));
    }
}

二、ArrayList遍歴性能比較(時間単位:マイクロ秒)
size
10
100
1,000
10,000
100,000
1,000,000
forサイクル
0
0
1
2
10
13
Iterator
1
0
0
2
11
14
for each
0
0
0
2
11
12
三、LinkedList遍歴性能比較(時間単位:マイクロ秒)
size
10
100
1,000
10,000
100,000
1,000,000
forサイクル
0
0
3
74
8656
>15min
Iterator
1
1
1
2
4
26
for each
0
0
1
3
4
29
四、まとめ
  • ArrayListの場合、sizeがどんなに大きくても時間がかかることは多くなく、どちらを選択しても同じ
  • である.
  • for eachの内部も実はiteratorで実現されているので、ArrayListでもLinkedListでもiteratorとfor eachの性能は
  • ほど悪くない.
  • LinkedListはgetのたびに開始位置から検索しなければならないため、遍歴の性能は
  • 遅い.
  • 総合的に見ると、for eachを使うことをお勧めします.コードは簡潔で、性能も悪くありません.
  • 五、参考資料
    https://blog.csdn.net/dengnanhua/article/details/64692191
    https://blog.csdn.net/xyc_csdn/article/details/69683799