Java 遍历方法性能比较

 经过实际多种场景测试,Java遍历方法的性能比较:

普通循环                                  :28ms
Iterator                                     :26ms
增强for循环                              :27ms
forEach                                    :64ms
stream().forEach                      :24ms
parallelStream().forEach          :33ms 

    //下面测试代码,欢迎大家找茬;

	public static void main(String[] args) {
	        List<Integer> list = new ArrayList<Integer>();
	        //List<Integer> list = new LinkedList<>();
	        
	        //n越大,parallelStream性能越好
	        int n = 10000000;
	        while (n > 0) {
	            list.add(n);
	            n--;
	        }

	        test1(list); //普通循环
	        test2(list); //Iterator
	        test3(list); //增强for循环
	        test4(list); //forEach
	        test5(list); //stream().forEach
	        test6(list); //parallelStream().forEach
	    }
	    public static void test1(List<Integer> list) {
	        long before = System.currentTimeMillis();
	        int j = list.size();
	        for (int i = 0; i < j; i++) {
	            dosomething(list.get(i));
	        }
	        long after = System.currentTimeMillis();
	        System.out.println("普通循环                                                                  :" + (after - before) + "ms");
	    }
	    public static void test2(List<Integer> list) {
	        long before = System.currentTimeMillis();
	        for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
	            int item = iterator.next();
	            dosomething(item);
	        }
	        long after = System.currentTimeMillis();
	        System.out.println("Iterator                :" + (after - before) + "ms");
	    }
	    public static void test3(List<Integer> list) {
	        long before = System.currentTimeMillis();
	        for (int i : list) {
	            dosomething(i);
	        }
	        long after = System.currentTimeMillis();
	        System.out.println("增强for循环                                                       :" + (after - before) + "ms");
	    }
	    public static void test4(List<Integer> list) {
	        long before = System.currentTimeMillis();
	        list.forEach(item -> dosomething(item));
	        long after = System.currentTimeMillis();
	        System.out.println("forEach                 :" + (after - before) + "ms");
	    }
	    public static void test5(List<Integer> list) {
	        long before = System.currentTimeMillis();
	        list.stream().forEach(item -> dosomething(item));
	        long after = System.currentTimeMillis();
	        System.out.println("stream().forEach        :" + (after - before) + "ms");
	    }
	    public static void test6(List<Integer> list) {
	        long before = System.currentTimeMillis();
	        list.parallelStream().forEach(item -> dosomething(item));
	        long after = System.currentTimeMillis();
	        System.out.println("parallelStream().forEach:" + (after - before) + "ms");
	    }

	    public static void dosomething(int i) {
	        int x = i;
	        while (x < Integer.MAX_VALUE) {
	            x++;
	            int a = x % 2;
	        }
	    }

猜你喜欢

转载自blog.csdn.net/GreenOwl_/article/details/80762357