Java中ArrayList的fori和foreach效率比较
1. list的元素为Integer
- 【代码实例1】
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
int maxNum = 1000000;
for (int i = 0; i < maxNum; i++) {
list.add(i);
}
//开始测试不同方式的for性能
int listSize = list.size();
Integer searchVal = 66666;
boolean searchFlag = false;
//基本形式的for循环
long startTime1 = System.currentTimeMillis();
for (int i = 0; i < listSize; i++) {
Integer val = list.get(i);
if (val.equals(searchVal)) {
searchFlag = true;
}
}
long endTime1 = System.currentTimeMillis();
//foreach形式
long startTime2 = System.currentTimeMillis();
for (Integer val : list) {
if (val.equals(searchVal)) {
searchFlag = true;
}
}
long endTime2 = System.currentTimeMillis();
//输出运行时间
System.out.println("fori: " + (endTime1 - startTime1));
System.out.println("forearch: " + (endTime2 - startTime2));
}
- 【运行结果】
fori: 5
forearch: 8
2. list的元素为自定义对象
- 自定义的Student类
public class Student {
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
- 【代码实例2】
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
int maxNum = 1000000;
for (int i = 0; i < maxNum; i++) {
list.add(new Student("student" + i, i));
}
//开始测试不同方式的for性能
int listSize = list.size();
String searchName = "student6666";
boolean searchFlag = false;
//基本形式的for循环
long startTime1 = System.currentTimeMillis();
for (int i = 0; i < listSize; i++) {
Student val = list.get(i);
if (searchName.equals(val.getName())) {
searchFlag = true;
}
}
long endTime1 = System.currentTimeMillis();
//foreach形式
long startTime2 = System.currentTimeMillis();
for (Student stu : list) {
if (searchName.equals(stu.getName())) {
searchFlag = true;
}
}
long endTime2 = System.currentTimeMillis();
//输出运行时间
System.out.println("fori: " + (endTime1 - startTime1));
System.out.println("forearch: " + (endTime2 - startTime2));
}
- 【运行结果】
fori: 17
forearch: 18
3. 分析
【代码实例1】经过多次运行,可以看出fori确实始终比foreach快,而且在本次的测试中,快的时间还不少。【代码实例2】中list的元素换成了自定义的对象,经过多次运行,时间都差不多,甚至有时两者的运行时间相同。如果非得要对fori和foreach进行循环效率的比较的话,还是建议使用fori的方式。本结果只是针对ArrayList在上述两个测试程序中测试出的结果,仅供参考。
Java中ArrayList的fori和foreach效率比较的更多相关文章
- Java中LinkedList的fori和foreach效率比较
在<Java中ArrayList的fori和foreach效率比较>中对ArrayList的两种循环方式进行了比较,本次对LinkedList的两种遍历方式进行效率的比较. 1. list ...
- java中ArrayList 、LinkList区别
转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...
- Java中arraylist和linkedlist源代码分析与性能比較
Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arra ...
- JAVA中ArrayList用法
JAVA中ArrayList用法 2011-07-20 15:02:03| 分类: 计算机专业 | 标签:java arraylist用法 |举报|字号 订阅 Java学习过程中做题时 ...
- Java中ArrayList与LinkedList的区别
Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach
一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...
- java中ArrayList 和 LinkedList 有什么区别
转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...
- Java中ArrayList相关的5道面试题
本文参考了 <关于ArrayList的5道面试题 > 1.ArrayList的大小是如何自动增加的? 这个问题我想曾经debug过并且查看过arraylist源码的人都有印象,它的过程是: ...
- Java中ArrayList类详解
1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...
随机推荐
- P1903 [国家集训队]数颜色 带修改莫队板子
大概就是要多加一维time 然后按照(l的块,r的块,time)为关键字排序 转移区间修改还是按照莫队的方式(每个修改要记修改前后的状态) 然后玄学dalao告诉窝块大小设为\(O(n^{\frac{ ...
- SSIS 发送邮件
在SSIS中Send Mail的方法主要有三种,使用Send Mail Task,使用Script Task和使用存储过程msdb.dbo.sp_send_dbmail. 一,使用Send Mail ...
- UWP 卡片视图 Card View
上一篇 提到了 UWP 轨道视图Orbit View,这次就说一下卡片视图,毕竟两个差不多. 卡片视图,效果如其名,卡片一样,左右滑动,当然能翻牌最好了. 嗯,我这个可以的额(⊙﹏⊙)... 看下效果 ...
- 关于AutoMapper和WCF的一些认识
现在互联网时代呈尚快速开发,快速迭代.伴随着必然产生一些好用的第三方工具,今天有幸看到了Automapper这种类似ORM的框架,但是跟ORM还不太一样, ORM是实体和数据库表之间的映射,而此框架主 ...
- STM8S——Universal asynchronous receiver transmitter (UART)
UART基本介绍: 通用异步收发器UART他的功能非常强大 我们只使用UART的全双工异步通信功能,使用中断接收数据. UART_RX:串行数据输入. UART_TX:串行数据输出. 硬件支持: 连接 ...
- oracle出现无法修改的异常记录
oracle数据库(PLSQL登录器),修改时遇到无法修改以前的记录. 解决方法: 是因为session正在操作(有锁),出现的假象让你觉得执行了sql却无法显示出修改的数据. 一个操作用户未完成操作 ...
- ionic生成签名的APK方法总结
ionic生成签名的apk步骤如下: 1. 在项目目录下运行 ionic build android --release 先生成一个未签名的apk 2. 在项目目录下运行 keytool -genke ...
- Fiddler 抓包https配置 提示:creation of the root certificate was not successful 证书安装不成功
window7 提示:creation of the root certificate was not successful 证书安装不成功 1.cmd 命令行 找到fiddler的安装目录 如 ...
- 在server 2003中搭建域服务(Http NTLM 代理)
在server 2003中搭建域服务(Http NTLM 代理) 在windows server 2003 X64中搭建域服务的操作. 可参考百度经验:http://www.cnblogs.com/z ...
- 3、ObjectARX开发创建直线、圆、圆弧和修改对象属性
一.本节课程 Arx二次开发创建直线.圆.圆弧和修改对象属性 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建直线. 2.如何应用C++ ARX二次开发创建圆. 3.如何应用C++ AR ...