节点
本文使用endTime - startTime
方法来测量循环的性能,它忽略了JVM预热优化,其结果可能不一致或准确。更好的方法是使用OpenJDK JMH框架进行基准测试,因为它将自动处理JVM的预热问题,请参见此示例– Java JMH基准教程
一个简单的Java代码来测试以下循环方法的性能:
- While循环
- 对于循环
- 迭代器循环
在Java中,只需比较endTime和startTime即可获得函数的经过时间。
复制代码
1
2
3
4
5long startTime = new Date().getTime(); // call something else long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("Elapsed time in milliseconds: " + difference);
While vs For vs迭代器
循环包含1、5、10和1500万条记录的List
Java代码。
LoopSimpleTest.java
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72package com.mkyong.benchmark.bk; import java.util.Arrays; import java.util.Date; import java.util.Iterator; import java.util.List; public class LoopSimpleTest { private static List<String> DATA_FOR_TESTING = Arrays.asList(createArray()); public static void main(String[] argv) { LoopSimpleTest obj = new LoopSimpleTest(); obj.loopIterator(); obj.loopFor(); obj.loopWhile(); } public void loopFor() { System.out.println("n--------- For Loop -------n"); long startTime = new Date().getTime(); for (int i = 0; i < DATA_FOR_TESTING.size(); i++) { String s = DATA_FOR_TESTING.get(i); } long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("For - Elapsed time in milliseconds: " + difference); } public void loopWhile() { System.out.println("n--------- While Loop -------n"); long startTime = new Date().getTime(); int i = 0; while (i < DATA_FOR_TESTING.size()) { String s = DATA_FOR_TESTING.get(i); i++; } long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("While - Elapsed time in milliseconds: " + difference); } public void loopIterator() { System.out.println("n--------- Iterator Loop -------n"); long startTime = new Date().getTime(); Iterator<String> iterator = DATA_FOR_TESTING.iterator(); while (iterator.hasNext()) { String next = iterator.next(); } long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("Iterator - Elapsed time in milliseconds: " + difference); } private static String[] createArray() { String sArray[] = new String[15_000_000]; for (int i = 0; i < 15_000_000; i++) { sArray[i] = "Array " + i; } return sArray; } }
输出量
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15D:test>java -Xms1024m -Xmx1024m ArrayToList --------- Iterator Loop ------- Iterator - Elapsed time in milliseconds: 390 --------- For Loop -------- For - Elapsed time in milliseconds: 234 --------- While Loop ------- While - Elapsed time in milliseconds: 234

迭代器循环最慢,并且for循环和while循环之间的差异并不明显。
参考文献
- Java JMH基准教程
标签: 基准 Java 循环 性能
翻译自: https://mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/
最后
以上就是幽默冷风最近收集整理的关于Java – While vs For vs Iterator性能测试的全部内容,更多相关Java内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复