0
点赞
收藏
分享

微信扫一扫

接上文的测试JavaScript循环方法性能,这次测试一下Java的所有循环方法的性能

Java几种循环方法

  1. for 循环
  2. while 循环
  3. do-while 循环
  4. for-each 循环
  5. Stream API(Java 8+)

测试环境

计算机硬件

接上文的测试JavaScript循环方法性能,这次测试一下Java的所有循环方法的性能_List

Java JDK版本

接上文的测试JavaScript循环方法性能,这次测试一下Java的所有循环方法的性能_Java_02

测试代码

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");
    }
}

运行结果打印

接上文的测试JavaScript循环方法性能,这次测试一下Java的所有循环方法的性能_循环方法_03

性能排行及原因

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

相关推荐

0 条评论