for、foreach、stream性能比较

1、for循环

public static void main(String[] args) {
   	Long startTime = System.currentTimeMillis();
    formMethod();
    Long endTime = System.currentTimeMillis();
    System.out.println("result:" + (endTime - startTime)); 
}

public static void formMethod(){
    for (int i = 0; i < 10000; i++) {
        System.out.println("start::::::::::::");
    } 
 }

2、foreach循环(for循环的增强版)


​```
public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < 10000; i++) {
        list.add(i);
    }
    Long startTime = System.currentTimeMillis();
    foreachMethod(list);
    Long endTime = System.currentTimeMillis();
    System.out.println("result:" + (endTime - startTime));
}
​```

/**

* foreach
* @param list
  */
  public static void foreachMethod(List<Integer> list){
    list.forEach(i ->{
        System.out.println("++++++++++++");
    });
  }

结论:通过代码测试发现在1万以内的数据,for循环比foreach效率要高一些;但是10万以内数据的时候,foreach效率更高一些!

foreach [10万数据时间 1112 1165 1203 1115] [1万数据 235 146 176 164 175]

for循环 [10万数据时间 1330 1437 1347] [1万数据 110 109 141]

3、stream api

(1)、串行处理,即同步处理

  • public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < 10000; i++) {
            list.add(i);
        }
        Long startTime = System.currentTimeMillis();
        streamMethod(list);
        Long endTime = System.currentTimeMillis();
        System.out.println("result:" + (endTime - startTime));
    }
    
    /**
    
    * stream 串行处理
    * @param list
      */
      public static void streamMethod(List<Integer> list){
        list.stream().forEach(i ->{
            System.out.println("========");
        });
      }
      
    

    结论:1万以内的数据,for循环的性能要高于foreach和stream;10万以内的数据明显可以看出stream效率最高,其次foreach,最后是for。

[10万数据时间 854 892 789 844][1万数据 172 156 219 172 171]

(2)并行处理,即stream api提供了异步处理机制

  • public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < 10000; i++) {
            list.add(i);
        }
        Long startTime = System.currentTimeMillis();
        parallelStreamMethod(list);
        Long endTime = System.currentTimeMillis();
        System.out.println("result:" + (endTime - startTime));
    }
    /**
    
    * stream 并行处理
    * @param list
      */
      public static void parallelStreamMethod(List<Integer> list){
        list.parallelStream().forEach(i ->{
            System.out.println("========");
        });
      }
    

    结论:1万以内的数据,for循环的性能要高于foreach和stream;10万以内的数据明显可以看出stream效率最高,其次foreach,最后是for。

[10万数据时间 893 844 914 972][1万数据 219 203 234 188 ]

posted @ 2024-08-06 11:35  wen-210162704027  阅读(5)  评论(0编辑  收藏  举报