JAva List遍歴性能比較
12041 ワード
一、テストコード
二、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
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
四、まとめ
https://blog.csdn.net/dengnanhua/article/details/64692191
https://blog.csdn.net/xyc_csdn/article/details/69683799