首页 > 编程语言 >Java 中 List 的5种遍历方式

Java 中 List 的5种遍历方式

时间:2022-10-05 18:44:32浏览次数:91  
标签:遍历 Java iterator List list System forEach println out

本测试没有具体业务,单纯遍历,也许会有误差。


主单元测试方法

    @Test
    public void test(){
        List<Integer> list = new ArrayList<>();
        int n = 1000_0000;
        for (int i = 0; i < n; i++) {
            list.add(i);
        }

        System.out.println("======== 1 fori 推荐 ==========");
        foriTest(list);
        System.out.println("======== 2 iterator ==========");
        iteratorTest(list);
        System.out.println("======== 3 增强for ==========");
        forBoostTest(list);
        System.out.println("======== 4 forEach 最耗时 java8 ==========");
        forEachTest(list);
        System.out.println("======== 5 stream forEach 比较耗时和增强for差不多 java8 ==========");
        streamForEachTest(list);
        System.out.println("======== 6 parallelStream  java8 ==========");
        parallelStreamForEachTest(list);
    }

测试1000万数据测试结果
======== 1 fori 推荐 ==========
for i time=7
======== 2 iterator ==========
iterator for time=8
iterator while time=8
======== 3 增强for ==========
for Boost time=	22
======== 4 forEach 最耗时 java8 ==========
list.forEach time=69
======== 5 stream forEach 比较耗时和增强for差不多 java8 ==========
list.stream().forEach time=23
======== 6 parallelStream forEach 并行 java8 ==========
list.parallelStream().forEach time=28

1、普通fori 方式遍历
    /**
     * 1
     * 普通fori
     * 效率最高,也是java官方推荐的用法
     *
     * @param list
     */
    public static void foriTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        int j = list.size();
        for (int i = 0; i < j; i++) {
            list.get(i);
        }
        long after = System.currentTimeMillis();
        System.out.println("for i time=\t"  + (after - before));
    }

2、iterate()迭代器方式(collection 集合共有方法)
    /**
     * 2 iterator
     * 迭代器
     * @param list
     */
    public static void iteratorTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {
            iterator.next();
        }
        long after = System.currentTimeMillis();
        System.out.println("iterator for time=\t"  + (after - before));

        before = System.currentTimeMillis();
        /**
         * while 循环写法
         */
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            iterator.next();
        }
        after = System.currentTimeMillis();
        System.out.println("iterator while time=\t"  + (after - before));
    }

3、增强for
    /**
     * 3
     * 增强for
     * @param list
     */
    public static void forBoostTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        for (int item : list) {
            // System.out.println(item);
        }
        long after = System.currentTimeMillis();
        System.out.println("for Boost time=\t"  + (after - before));
    }

4、forEach() 注意java8 才支持
    /**
     * 4 foreach
     * foreach 最慢不推荐 java8 lambda
     * @param list
     */
    public static void forEachTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        list.forEach(item -> {
            // System.out.println(item);
        });
        long after = System.currentTimeMillis();
        System.out.println("list.forEach time=\t"  + (after - before));
    }

5、stream().forEach() 注意java8 才支持
    /**
     * 5 stream foreach
     * stream foreach java8 特有
     * @param list
     */
    public static void streamForEachTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        list.stream().forEach(item -> {
            // System.out.println(item);
        });
        long after = System.currentTimeMillis();
        System.out.println("list.stream().forEach time=\t"  + (after - before));
    }

6、parallelStream().forEach() 注意java8 才支持
    /**
     * 5 stream foreach
     * stream foreach java8 特有
     * @param list
     */
    public static void parallelStreamForEachTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        list.parallelStream().forEach(item -> {
            // System.out.println(item);
        });
        long after = System.currentTimeMillis();
        System.out.println("list.parallelStream().forEach time=\t"  + (after - before));
    }

标签:遍历,Java,iterator,List,list,System,forEach,println,out
From: https://www.cnblogs.com/sxhxh/p/16756113.html

相关文章

  • Effective+Java+中文版 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1lYgUZopqC5MqRFQSiLHW6w点击这里获取提取码 ......
  • vue(8)v-model与JavaScript中array对象的配合使用
    序实现了之前代码的删除功能,并加入了对于复选框的全选,全不选,反选等功能示例代码展开查看<!DOCTYPEhtml><html> <head> <meta......
  • Java方法(可变参数)
    Jdk1.5开始,Java支持传递同类型的可变参数给一个方法在方法声明中,在指定参数类型后加一个省略号(...)一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通......
  • java中的自动拆装箱与缓存(Java核心技术阅读笔记)
    最近在读《深入理解java核心技术》,对于里面比较重要的知识点做一个记录!众所周知,Java是一个面向对象的语言,而java中的基本数据类型却不是面向对象的!为了解决这个问题,Java为......
  • JavaScript中的Promise详解
    我们了解Promise之前先了解一下什么是异步,因为Promise是用来处理异步操作的一、什么是异步异步(Asynchronous,async)是与同步(Synchronous,sync)相对的概念。总所周知,Jav......
  • Java方法
    流程控制基础1.用户交互Scanner定义:实现程序和人的交互,Scanner类可以来获取用户的输入基本语法 Scanners=newScanner(System.in); //创建Scanner对象通......
  • java框架——Spring(二)
    AOP简介AOP(AspectOrientedProgramming)面向切面编程,一种编程范式,指导开发者如何组织程序结构OOP(ObjectOrientedProgramming)面向对象编程作用:在不惊动原始设计的基......
  • java子类对父类继承的属性在不同修饰词下的访问权限
    父类中的属性和方法可以被子类继承子类中继承了父类中的属性和方法后,在子类中能不能直接使用这些属性和方法:和这些属性和方法原有的修饰符(publicprotecteddefaultpri......
  • 关于javaSE继承中super的考究
    在对父类非private属性的使用过程中super专门用来指代继承过来的属性,在子类没有与父类重名的情况下。实际功能与this并无二异packagegunjo.kirito.union.course;cla......
  • 手撕前端面试题【javascript~文件扩展名、分隔符、单向绑定、判断版本、深浅拷贝、内
    前端的那些基本标签​​......