list 循环给对象赋值三种方法速度比较

原创
2023/03/08 11:52
阅读数 223

list循环给对象赋值可以用普通的for循环,也可以用foreach,也可以用stream流的方式

  • 初始化
//搞个测试类来,省事就用内部静态类来测试
static class Demo{
        String a;
        String b = "bb";

         void setA(String a) {
            this.a = a;
        }
    }
//有两个属性,其中一个已经给默认值了,我们接下来给a赋值,
//在main方法中给list中添加一些元素
static int frequency = 100000; 
    public static void main(String[] args) {
        List<Demo> list = new ArrayList<>();
        testStream(list);
        testFor(list);
        testForeach(list);
    }

    private static void testFor(List<Demo> list) {
        for (int i = 0; i < frequency; i++) {
            list.add(new Demo());
        }
        LocalDateTime now = LocalDateTime.now();
        for (Demo demo : list) {
            demo.setA("98");
        }
        System.out.println("ordinary for 循环用时:"+ Duration.between(now, LocalDateTime.now()).toMillis());
    }

    private static void testStream(List<Demo> list) {
        for (int i = 0; i < frequency; i++) {
            list.add(new Demo());
        }
        LocalDateTime now = LocalDateTime.now();
        List<Demo> collect = list.stream().peek(demo -> demo.setA("99")).collect(Collectors.toList());
        System.out.println("stream用时:"+ Duration.between(now, LocalDateTime.now()).toMillis());
    }

    private static void testForeach(List<Demo> list) {
        for (int i = 0; i < frequency; i++) {
            list.add(new Demo());
        }
        LocalDateTime now = LocalDateTime.now();
        list.forEach(demo -> demo.setA("100"));
        System.out.println("foreach用时:"+ Duration.between(now, LocalDateTime.now()).toMillis());
    }

跑10次看看结果

根据我自己的试验证明,在我的电脑上 for循环最快,stream最慢,如果不想要一个新的list,对速度又有一定的追求,建议用for循环赋值,主要是代码也没多写多少.

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部