遍历性能测试

阅读 56

2022-03-11

package com.njwbhz.March.week1.part0301;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;

public class TestTraverseTime {
    public static void main(String[] args) {
        //创建一个存储了100W个数据的数组
        List list = new ArrayList();

        for (long i = 0 ; i < 1000000 ; i++) {
            list.add(i + 10);
        }



        //普通的for循环遍历
        long method1StartTime , method1EndTime , method1Time;
        //开始计时
        method1StartTime = System.currentTimeMillis();

        //开始遍历
        for (int i = 0 ; i < list.size() ; i ++) {
            System.out.print(list.get(i));
        }

        //结束计时
        method1EndTime = System.currentTimeMillis();
        method1Time = method1EndTime - method1StartTime;
//        System.out.println(method1Time);


        //增强for循环遍历
        long method2StartTime , method2EndTime , method2Time;
        //开始计时
        method2StartTime = System.currentTimeMillis();

        //开始遍历
        for (Object data : list) {
            System.out.print(data);
        }

        //结束计时
        method2EndTime = System.currentTimeMillis();
        method2Time = method2EndTime - method2StartTime;
//        System.out.println(method2Time);

        //使用迭代器进行遍历
        long method3StartTime , method3EndTime , method3Time;

        //创建迭代器的对象
        Iterator iterator = list.iterator();
        //开始计时
        method3StartTime = System.currentTimeMillis();

        //开始遍历
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        //结束计时
        method3EndTime = System.currentTimeMillis();
        method3Time = method3EndTime - method3StartTime;
//        System.out.println(method3Time);


        //创建匿名内部类进行遍历
        long method4StartTime , method4EndTime , method4Time;

        Consumer consumer = new Consumer() {
            @Override
            public void accept(Object o) {
                System.out.print(o + "\t");
            }
        };
        //开始计时
        method4StartTime = System.currentTimeMillis();

        //开始遍历
        list.forEach(consumer);

        //结束计时
        method4EndTime = System.currentTimeMillis();
        method4Time = method4EndTime - method4StartTime;
//        System.out.println(method4Time);


        //使用lambda表达式进行遍历
        long method5StartTime , method5EndTime , method5Time;

        //开始计时
        method5StartTime = System.currentTimeMillis();

        //开始遍历
        list.forEach((o) -> System.out.print(o));

        //结束计时
        method5EndTime = System.currentTimeMillis();
        method5Time = method5EndTime - method5StartTime;
//        System.out.println(method5Time);


        //使用方法引用进行遍历
        long method6StartTime , method6EndTime , method6Time;

        //开始计时
        method6StartTime = System.currentTimeMillis();

        //开始遍历
        list.forEach(System.out::print);

        //结束计时
        method6EndTime = System.currentTimeMillis();
        method6Time = method6EndTime - method6StartTime;
//        System.out.println(method6Time);

        System.out.println("普通的for循环遍历用时为:" + method1Time/1000 + "s" + "(" + method1Time + "ms" + ")");
        System.out.println("增强的for循环遍历用时为:" + method2Time/1000 + "s" + "(" + method2Time + "ms" + ")");
        System.out.println("迭代器进行的遍历用时为:" + method3Time/1000 + "s" + "(" + method3Time + "ms" + ")");
        System.out.println("创建匿名内部类进行的遍历用时为:" + method4Time/1000 + "s" + "(" + method4Time + "ms" + ")");
        System.out.println("使用lambda表达式进行的遍历用时为:" + method5Time/1000 + "s" + "(" + method5Time + "ms" + ")");
        System.out.println("方法引用进行的遍历用时为:" + method6Time/1000 + "s" + "(" + method6Time + "ms" + ")");
    }
}

精彩评论(0)

0 0 举报