一、遍历 -- 最好和stream流连用

使用jdk8提供的forEach进行遍历时,采用的是多线程的操作,理论上讲是会比原来的方法更快。但是注意,系统启动时需要加载lambda框架的内容。因此如果通过main函数这种直接测试新老方法更快,很有可能因为新方法需要加载lambda,导致性能反而不如老方法。但是,对于启动着的项目,就可以避免由于初次加载lambda导致的问题。

1、 list遍历

List对象.forEach((item)->{

循环体要进行的操作;

});

注:item就是每一个list元素

public void forEachInList() {
    List<Teacher> list
= new ArrayList<>();
    for (int i = 1; i < 1000000; i++) {
        Student student = new Student("学生编号" + i, "学生姓名" + i);
        Teacher teacher = new Teacher("老师姓名" + i, student);
        list.add(teacher);
    }
    long start2
= System.currentTimeMillis();
    for (Teacher teacher : list) {
        String teacherName
= teacher.getTeacherName();
        Student student = teacher.getStudent();
        String stuId
= student.getStuId();
        String stuName
= student.getStuName();
        for (int i = 0; i < 10000; i++) {

}
    }
    long end2
= System.currentTimeMillis();
    System.out.println("老方法遍历list:" + (end2 - start2) + "ms");
    long start1
= System.currentTimeMillis();
    list.forEach((item) -> {
        String teacherName
= item.getTeacherName();
        Student student = item.getStudent();
        String stuId
= student.getStuId();
        String stuName
= student.getStuName();
        for (int i = 0; i < 10000; i++) {

}
    });
    long end1
= System.currentTimeMillis();
    System.out.println("新方法遍历list:" + (end1 - start1) + "ms");
}

2、 Map遍历

Map对象.forEach((key,value)->{

循环体内需要进行的操作;

});

注:key就是每一个map元素的键,value就是每一个map元素的值;key与value是成对的。

public void forEachInMap() {
    Map<Integer, Teacher> map = new HashMap<>();
    for (int i = 1; i < 1000000; i++) {
        Student student = new Student("学生编号" + i, "学生姓名" + i);
        Teacher teacher = new Teacher("老师姓名" + i, student);
        map.put(i, teacher);
    }
    long start2 = System.currentTimeMillis();
    for (Map.Entry<Integer, Teacher> entry : map.entrySet()) {
        Teacher teacher = entry.getValue();
        String teacherName = teacher.getTeacherName();
        Student student = teacher.getStudent();
        String stuId = student.getStuId();
        String stuName = student.getStuName();
        for (int i = 0; i < 10000; i++) {         }
    }
    long end2 = System.currentTimeMillis();
    System.out.println("老方法遍历map:" + (end2 - start2) + "ms");
    long start1 = System.currentTimeMillis();
    map.forEach((key, value) -> {
        String teacherName = value.getTeacherName();
        Student student = value.getStudent();
        String stuId = student.getStuId();
        String stuName = student.getStuName();
        for (int i = 0; i < 10000; i++) {         }
    });
    long end1 = System.currentTimeMillis();
    System.out.println("新方法遍历map:" + (end1 - start1) + "ms");
}

3、 数组遍历

Collections.addAll(list对象,数组);

List对象. .forEach((item)->{

循环体要进行的操作;

});

注:item就是每一个list元素;由于数组没有提供forEach方法,因此需要先转换成list,通过list进行遍历操作。

此外,可以通过Arrays.stream()或者Stream.of()的方式先将数组转换成stream流,进而使用stream流的forEach方法。

public void forEachInArray() {
    Teacher[] teachers = new Teacher[1000000];
    for (int i = 0; i < 1000000; i++) {
        Student student = new Student("学生编号" + i, "学生姓名" + i);
        Teacher teacher = new Teacher("老师姓名" + i, student);
        teachers[i] = teacher;
    }
    long start2 = System.currentTimeMillis();
    for (Teacher teacher : teachers) {
        String teacherName = teacher.getTeacherName();
        Student student = teacher.getStudent();
        String stuId = student.getStuId();
        String stuName = student.getStuName();
        for (int i = 0; i < 10000; i++) {         }
    }
    long end2 = System.currentTimeMillis();
    System.out.println("老方法遍历数组:" + (end2 - start2) + "ms");
    long start1 = System.currentTimeMillis();
    List<Teacher> teacherList = new ArrayList<>();
    Collections.addAll(teacherList, teachers);
    teacherList.forEach((value) -> {
        String teacherName = value.getTeacherName();
        Student student = value.getStudent();
        String stuId = student.getStuId();
        String stuName = student.getStuName();
        for (int i = 0; i < 10000; i++) {         }
    });
    long end1 = System.currentTimeMillis();
    System.out.println("新方法遍历数组:" + (end1 - start1) + "ms");
}

最新文章

  1. UML学习(三)-----序列图
  2. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
  3. Javascript 语言精粹 代码片段合集
  4. MVC框架 与Smarty
  5. Linux 命令执行结果输出到屏幕的同时写入到文件中
  6. android 给空白包签名
  7. nodejs express 框架解密2-如何创建一个app
  8. 236. Lowest Common Ancestor of a Binary Tree
  9. 代码修改mysql字符
  10. Struts入门学习(一)
  11. FragmentTabHost+FrameLayout实现底部菜单栏
  12. displayport-2
  13. Struts2第十一篇【简单UI标签、数据回显】
  14. JavaScript实现职责链模式
  15. scrapy学习
  16. 刷题upupup【Java中HashMap、HashSet用法总结】
  17. conda添加多个版本的python
  18. 修改 sql 提示符信息:
  19. P1495 曹冲养猪(拓展欧几里得)
  20. 在Windows中安装PostgreSQL

热门文章

  1. nginx.conf添加lua.conf配置
  2. 『集群』004 Slithice 集群分布式(多个客户端,基于中央服务器的集群服务)
  3. Java基础知识回顾之五 ----- 多线程
  4. Python:用 peewee 框架连接 SQL Server
  5. Tomcat 对 HTTP 协议的实现(下)
  6. RDIFramework.NET V3.3 Web版新增日程管理功能模块
  7. 全内存的redis用习惯了?那能突破内存限制类redis产品ssdb呢?
  8. 【春华秋实】.NET Core之只是多看了你一眼
  9. Spring Boot 2.X 如何添加拦截器?
  10. java.sql.SQLException: The server time zone value &#39;???&#250;&#177;&#234;&#215;??&#177;??&#39; is unrecognized or represents more than one time zone.