2021-08-13-测试for,foreache,stream-foreach的性能,测不出来??

测试for,foreache,stream-foreach的性能


import java.util.ArrayList;
import java.util.List;

/**
 * 测试for循环的性能
 * @author leemeea
 * @date 2021/8/13 11:11
 */
public class TestMain {

    public static void main(String[] args) {
        // 测试源
        List<TestMain> sourceList = new ArrayList<>();
        for (int i = 0; i < 10000000; i++) {
            TestMain main = new TestMain();
            main.setInteger(i);
            main.setString("第" + i + "条数据");
            sourceList.add(main);
        }
        System.out.println("数据条数:" + sourceList.size());

        sourceList.parallelStream().forEach((t) -> doSome(t));
        System.gc();

        long a1 = System.currentTimeMillis();
        for (int i = 0; i < sourceList.size(); i++){
            doSome(sourceList.get(i));
        }
        long a2 = System.currentTimeMillis();
        System.out.println("普通for循环用时:" + (a2 - a1));
        System.gc();

        long b1 = System.currentTimeMillis();
        for (TestMain t : sourceList){
            doSome(t);
        }
        long b2 = System.currentTimeMillis();
        System.out.println("增强for循环用时:" + (b2 - b1));
        System.gc();

        long c1 = System.currentTimeMillis();
        sourceList.forEach(
                (t) -> doSome(t)
        );
        long c2 = System.currentTimeMillis();
        System.out.println("forEach循环用时:" + (c2 - c1));
        System.gc();

        long d1 = System.currentTimeMillis();
        sourceList.stream().forEach(
                (t) -> doSome(t)
        );
        long d2 = System.currentTimeMillis();
        System.out.println("forEach-stream循环用时:" + (d2 - d1));
        System.gc();


        long e1 = System.currentTimeMillis();
        sourceList.parallelStream().forEach(
                (t) -> doSome(t)
        );
        long e2 = System.currentTimeMillis();
        System.out.println("forEach-parallelStream循环用时:" + (e2 - e1));
        System.gc();

        System.out.println(sourceList.get(0));
    }

    private static void doSome(TestMain main) {
        main.setInteger(main.getInteger() +1);
        main.setString(main.getString() +1);

//        try {
//            Thread.sleep(1);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }




    private String string;
    private Integer integer;

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }

    public Integer getInteger() {
        return integer;
    }

    public void setInteger(Integer integer) {
        this.integer = integer;
    }

    @Override
    public String toString() {
        return "TestMain{" +
                "string='" + string + '\'' +
                ", integer=" + integer +
                '}';
    }
}

感觉并没啥用-测不出来
java会对指令做优化,才疏学浅测试不出来

下图是上面代码出来的结果
在这里插入图片描述

总的来说,在日常使用场景中 foreach效果都很好,具体还是得看具体需求

参考:https://blog.csdn.net/SarielAngel/article/details/83899377

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值