Java几种循环方法
- for 循环
- while 循环
- do-while 循环
- for-each 循环
- Stream API(Java 8+)
测试环境
计算机硬件

Java JDK版本

测试代码
import java.util.ArrayList;
import java.util.List;
/**
* @author 水货程序员
* @date 2024/11/24
* @description Java 中不同循环方法的性能比较
*/
public class LoopPerformanceTest {
public static void main(String[] args) {
int size = 1000000;
List<Integer> list = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
list.add(i);
}
testForLoop(list);
testWhileLoop(list);
testDoWhileLoop(list);
testForEachLoop(list);
testStreamApi(list);
}
private static void testForLoop(List<Integer> list) {
long startTime = System.nanoTime();
for (int i = 0; i < list.size(); i++) {
list.get(i);
}
long endTime = System.nanoTime();
System.out.println("for 循环: " + (endTime - startTime) + " ns");
}
private static void testWhileLoop(List<Integer> list) {
long startTime = System.nanoTime();
int i = 0;
while (i < list.size()) {
list.get(i);
i++;
}
long endTime = System.nanoTime();
System.out.println("while 循环: " + (endTime - startTime) + " ns");
}
private static void testDoWhileLoop(List<Integer> list) {
long startTime = System.nanoTime();
int i = 0;
do {
list.get(i);
i++;
} while (i < list.size());
long endTime = System.nanoTime();
System.out.println("do-while 循环: " + (endTime - startTime) + " ns");
}
private static void testForEachLoop(List<Integer> list) {
long startTime = System.nanoTime();
for (Integer item : list) {
Integer item1 = item;
}
long endTime = System.nanoTime();
System.out.println("for-each 循环: " + (endTime - startTime) + " ns");
}
private static void testStreamApi(List<Integer> list) {
long startTime = System.nanoTime();
list.stream().forEach(item -> {Integer item1 = item;});
long endTime = System.nanoTime();
System.out.println("Stream API: " + (endTime - startTime) + " ns");
}
}
运行结果打印

性能排行及原因
- for 循环
- 性能最佳
- 原因:for 循环是最基本的循环结构,没有额外的函数调用开销,可以直接访问数组或集合中的元素。
- 串行
- while 循环
- 性能较好
- 原因:while 循环同样没有额外的函数调用开销,但比 for 循环稍微复杂一点,因为它需要在每次迭代时检查条件。
- 串行
- do-while 循环
- 性能较好
- 原因:do-while 循环与 while 循环类似,但先执行一次再判断条件,因此多了一次无条件执行的开销。
- 串行
- for-each 循环
- 性能中等
- 原因:for-each 循环是 Java 5 引入的新特性,内部使用迭代器,有一定的开销。但对于增强代码的可读性和简洁性非常有用。
- 串行
- Stream API
- 性能较差
- 原因:Stream API 是 Java 8 引入的功能,提供了丰富的流操作,但每次调用都会创建新的函数上下文,增加了额外的开销。适用于复杂的集合操作和并行处理。
- 并行/串行