Java8中 lambda forEach循环与增强for循环性能对比

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

Java8中 lambda forEach循环与增强for循环性能对比

来源:blog.csdn.net/asdflwlong/article/details/81538551

最近新的项目使用jdk1.8版本,于是乎博主想多使用一些lambda的写法,但是对于lambda并不是很了解所以在网上查了一些性能方面的资料,结果瞬间心凉,多数回答为lambda forEach循环性能要比传统循环差,性能甚至差出十几倍。然而,经过博主的测试那些回答是错误的。

性能对比的结论为 lambda forEach>增强for,以下给出测试数据。

public static void main(String[] args) {
        List<User> userList = initList(10000);
        for (int i = 1; i < 11; i++) {
            System.out.println("--------------------第" + i + "次");
            long t1 = System.nanoTime();
            testLambda(userList);
            long t2 = System.nanoTime();
            testForeach(userList);
            long t3 = System.nanoTime();
            System.out.println("lambda---" + (t2 - t1) / 1000 + "μs");
            System.out.println("增强for--" + (t3 - t2) / 1000 + "μs");
        }
    }
 
    /**
     * 增强for测试
     * @param userList
     */

    private static void testForeach(List<User> userList) {
        for (User user : userList) {
            user.hashCode();
        }
    }
 
 
    /**
     * lambda forEach测试
     * @param userList
     */

    private static void testLambda(List<User> userList) {
        userList.forEach(user -> user.hashCode());
    }
 
    /**
     * 初始化测试集合
     * @param size
     * @return
     */

    private static List<User> initList(int size) {
        List<User> userList = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            userList.add(new User("user" + i, String.valueOf(i)));
        }
        return userList;
    }

输出

--------------------第1次
lambda---207637μs
增强for--5210μs
--------------------第2次
lambda---767μs
增强for--1739μs
--------------------第3次
lambda---707μs
增强for--3118μs
--------------------第4次
lambda---716μs
增强for--1347μs
--------------------第5次
lambda---1078μs
增强for--1559μs
--------------------第6次
lambda---773μs
增强for--1382μs
--------------------第7次
lambda---756μs
增强for--1213μs
--------------------第8次
lambda---535μs
增强for--840μs
--------------------第9次
lambda---270μs
增强for--576μs
--------------------第10次
lambda---434μs
增强for--513μs

此时可以看出在第一次的时候两者性能相差40倍,这可能也是多数人认为它性能较差的原因,但是再后面的执行当中几乎都是lambda的执行速度快,所以博主觉得,lambda的forEach循环在首次执行的时候会初始化部分内容,从而导致执行过慢,在后续的执行当中由于不需要再次进行初始化,所以才展现出真正的实力。

关于其他方面的测试,有兴趣的同学可以自行测试。

推荐好文

强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!

能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮Java8中 lambda forEach循环与增强for循环性能对比

原文始发于微信公众号(Java笔记虾):Java8中 lambda forEach循环与增强for循环性能对比