(一)jdk8学习心得之遍历
一、遍历 -- 最好和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");
}

(一)jdk8学习心得之遍历的更多相关文章
- (六)jdk8学习心得之Stream流
六.Stream流 1. 什么是stream流 现阶段,可以把stream流看成一个高级版的Iterator.普通的Iterator只能实现遍历,遍历做什么,就需要具体些功能代码函数了.而这个stre ...
- (八)jdk8学习心得之Optional类
八.Optional 类 1. 作用:可以存放空指针null,主要用于解决空指针问题. 2. 使用方法 1) 创建对象(2种方法) Optional optional = Optional.of(非n ...
- (七)jdk8学习心得之join方法
七.join方法 1. 作用:将list或者数组按照连接符进行连接,返回一个字符串. 2. 使用方法 1) String.join(“连接符”,数组对象或者list对象) 2) 首先转换成stream ...
- (五)jdk8学习心得之默认方法
五.默认方法 1. 使用方法:写在接口中,就是为了接口可以做一些事情. 2. 目的:有很多实现类,有一个公共的抽象方法,其实这些实现类实现该抽象方法的内容是完全一致的,完全没有必要都重新实现一遍.并且 ...
- (四)jdk8学习心得之函数式接口
四.函数式接口 1. 格式 注:抽象方法就是通过lambda表达式或者方法引用实现. 2. Jdk提供的函数式接口(这里提供五个最为常用的) 3. 技巧 通过函数式接口,就可以把一个函数作为一个参数进 ...
- (三)jdk8学习心得之方法引用
三.方法引用 https://www.jianshu.com/p/c9790ba76cee 这边博客写的很好,可以首先阅读,在这里感谢这篇文章的博主. 1. 格式 调用者::调用者具备的方法名 2. ...
- (二)jdk8学习心得之Lambda表达式
二.Lambda表达式 1. 格式 (参数1,参数2,…,参数n)->{方法体} 注意: (参数1,参数2,...,参数n)要与方法接口中的参数一致,但是名字可以不一样. 此外,方法类型接口,有 ...
- JavaScript 秘密花园 学习心得
目的 记录一下学习心得,便于以后复习,内容是比较基础的...但是很多内容我还是不知道... 对象 对象使用和属性 1.JavaScript 中所有变量都可以当作对象使用,除了两个例外 null和dun ...
- effective java 学习心得
目的 记录一下最主要学习心得,不然凭我这种辣鸡记忆力分分钟就忘记白看了... 用静态工厂方法代替构造器的最主要好处 1.不必每次都创建新的对象 Boolean.valueOf Long.valueOf ...
随机推荐
- Vue.js-01:第一章 - 一些基础概念
一.前言 Vue.React.Angular,当今前端界的三驾马车,作为传统的后端程序员,前端再也不是我们想的那种切切图就可以了,第一次接触的话,先了解了解一些基础的概念. 学习系列目录地址:http ...
- ASP.NET Core WebApi中使用FluentValidation验证数据模型
原文链接:Common features in ASP.NET Core 2.1 WebApi: Validation 作者:Anthony Giretti 译者:Lamond Lu 介绍 验证用户输 ...
- KnockoutJS-快速入门
虽然在WPF中接触过MVVM模式,可是刚开始在Web中接触到Knockout.JS让我大吃一惊,简化了好多工作量,原来可能需要一大堆的JS脚本完成的工作量,被释放许多.接触KnockoutJS一年多了 ...
- springboot~使用docker构建gradle项目
这是一篇关系到四个知识点的文章,分别是java,docker,springboot和gradle,我们希望在java环境下,使用springboot框架,通过gradle去构建项目,然后把项目部署和运 ...
- 【我们一起写框架】MVVM的WPF框架(二)—绑定
MVVM的特点之一是实现数据同步,即,前台页面修改了数据,后台的数据会同步更新. 上一篇我们已经一起编写了框架的基础结构,并且实现了ViewModel反向控制Xaml窗体. 那么现在就要开始实现数据同 ...
- nmap命令总结
一.nmap是什么 nmap是一款网络扫描和主机检测的非常有用的工具,不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器.它可以适用于winodws,linux,mac等操作系统. ...
- 痞子衡嵌入式:第一本Git命令教程(0)- 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家讲的是Git命令汇编,共12篇文章,循序渐进地介绍Git操作的完整过程. 在开始Git课程之前,需要先跟大家普及2个重要概念(四度空间.四种状 ...
- vue + element 动态渲染、移除表单并添加验证
博客地址:https://ainyi.com/66 又接到新需求了吧~~ 背景 在一个大表单里,有可能会出现这种需求,用户可以自己操作动态添加.移除表单,更加个性化的效果. 常见于填写个人信息.附加内 ...
- 【转载】Mysql创建表时报错error150
从mysql数据库中导出正常数据库的脚本语句,而后使用脚本语句创建数据库的过程中,执行语句提示Can't Create Table 'XXX' erro150的错误,语句执行中断,创建table失败, ...
- linux服务器运维管理学习
一. 了解linux 1.Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统,它诞生于1991 年的 [Linux桌面] 10 月5 日(这是第一次正式向外公布的时间).以后借助于Inte ...