先上代码

package com.test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; public class Testttt {
public static void main(String[] args) {
// 实例化
List<String> stringLinkedList = new LinkedList<String>();
List<String> stringArrayList = new ArrayList<String>();
// 插入数据
for (int i = 0; i < 100000; i++) {
stringLinkedList.add(String.valueOf(i));
stringArrayList.add(String.valueOf(i));
}
String a = null;
// 1、用for循环遍历ArrayList
long forArrayMillis = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
a = stringArrayList.get(i);
}
System.err.println("用for循环遍历ArrayList,耗时:" + String.valueOf(System.currentTimeMillis() - forArrayMillis) + "ms");
// 2、用foreach循环遍历ArrayList
long foreachArrayMillis = System.currentTimeMillis();
for (String string : stringArrayList) {
a = string;
}
System.err.println("用foreach循环遍历ArrayList,耗时:" + String.valueOf(System.currentTimeMillis() - foreachArrayMillis) + "ms");
// 3、用for循环遍历LinkedList
long forLinkedMillis = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
a = stringLinkedList.get(i);
}
System.err.println("用for循环遍历LinkedList,耗时:" + String.valueOf(System.currentTimeMillis() - forLinkedMillis) + "ms");
// 4、用foreach循环遍历LinkedList
long foreachLinkedMillis = System.currentTimeMillis();
for (String string : stringLinkedList) {
a = string;
}
System.err.println("用foreach循环遍历LinkedList,耗时:" + String.valueOf(System.currentTimeMillis() - foreachLinkedMillis) + "ms");
} }

结果如下:

本次测试工10W条数据

通过控制台输出的结果可以看出,

  循环遍历ArrayList集合时,for和foreach的耗时时间差不多,多次测试可以发现,for循环效率比foreach的效率还要高一些;

  循环遍历LinkedList集合时,for循环的耗时明显高于foreach循环的耗时。

结论:当遍历数组结构的集合时用for或者foreach都行

(1、在固定长度或者长度不需要计算的时候for循环效率高于foreach;2、在不确定长度或者计算长度有损性能的时候用foreach比较方便--可以自己测试一下),

当遍历链表结构的集合时一定不要用for循环。

注:在《阿里巴巴Java开发手册终极版》有下面一条需要注意的

可以测试一下,在 foreach 循环中 add/remove 集合元素,有时会抛出 ConcurrentModificationException 异常

for循环和foreach循环遍历集合的效率比较的更多相关文章

  1. Java forEach 方式遍历集合(Java 8 新特性)

    JDK 8 新增 forEach 方式遍历集合,这种方式比原来的 for each 循环还要简洁和便利. 需要注意:如果你计算机安装的是 JDK 8 以前的版本,是不支持 JDK 8 的新特性 Lis ...

  2. Java for循环和foreach循环的性能比较

    就是有些人循环用的是普通for循环,有些人用的是foreach循环,它们之间有什么区别?应该在什么时候使用这两种循环了? 两种循环的语法格式: 普通for循环语法: for (int i = 0; i ...

  3. 程序控制结构及for循环、foreach循环、迭代器

    结构化程序设计 三种基本控制结构:顺序结构.选择结构.循环结构. 在这种思想的指导下,发展出了面向过程编程方式.面向过程编程的核心是算法+数据结构.算法可以用顺序.选择.循环这三种基本控制结构来实现. ...

  4. 使用for循环还是foreach循环?

    很多时候我们很自然的认为,for循环的时候使用foreach和原来的for循环用下标的方式遍历是相同的. 而且因为foreach循环写法简单,很容易理解,而且少去了很多麻烦的变量,所以估计在学会使用f ...

  5. java基础39 增强for循环(也叫foreach循环)

    增强for循环是jdk1.5出现的新功能 1.增强for循环的作用 简化了迭代器的书写格式(注意:增强for循环底层还是使用了迭代器遍历) 2.增强for循环的格式 for(数据类型 变量名:遍历的目 ...

  6. JavaScript的map循环、forEach循环、filter循环、reduce循环、reduceRight循环

    1.map循环 let arr=[1,2,3,4]; arr.map(function(value,key,arr){ //值,索引,数组(默认为选定数组) return item; //如果没有re ...

  7. 有关集合的foreach循环里的add/remove

    转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...

  8. IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素

    从JDK5之后,Java提供了一种更简单的循环:foreach循环,也叫作增强for循环,这种循环遍历数组和集合更加简洁.使用foreach循环遍历数组和集合元素时,无需获得数组或集合的长度,无需根据 ...

  9. 二维数组遍历的方式(for普通循环遍历、foreach循环遍历、toString方式遍历)

    package com.Summer_0421.cn; import java.lang.reflect.Array; import java.util.Arrays; /** * @author S ...

随机推荐

  1. redis 系列20 服务器下

    二. serverCron函数 2.3 更新服务器每秒执行命令次数 serverCron函数中的trackOperationsPerSecond函数会以每100毫秒一次的频率执行,这个函数以抽样计算的 ...

  2. C#版 - Leetcode 593. 有效的正方形 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  3. WebSocket刨根问底(一)

    年初的时候,写过两篇博客介绍在Spring Boot中如何使用WebSocket发送消息[在Spring Boot框架下使用WebSocket实现消息推送][在Spring Boot框架下使用WebS ...

  4. [Leetcode]100. Same Tree -David_Lin

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  5. SQL修改表字段,加附属属性

    GO Go EXEC sys.[sp_addextendedproperty] @name = 'MS_Description',@value = '是否填写表单',@level0type = 'SC ...

  6. leetcode — binary-tree-zigzag-level-order-traversal

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...

  7. leetcode — validate-binary-search-tree

    import apple.laf.JRSUIUtils; /** * Source : https://oj.leetcode.com/problems/validate-binary-search- ...

  8. leetcode — decode-ways

    /** * Source : https://oj.leetcode.com/problems/decode-ways/ * * * A message containing letters from ...

  9. window环境下使用filezilla server搭建ftp服务器

    前言 在做项目的时候,需要提供ftp服务,开始的时候使用微软自动的iss上的ftp服务,一段时间后发现无法自定义用户,只能使用系统的用户,使用起来很不方便,在权限管理方面也是不太好.所以换用了file ...

  10. kubernetes进阶之七:Service

    1.概述 Service也是Kubernetes里的最核心的资源对象之一,Kubernetes里的每个Service其实就是我们经常提起的微服务架构中的一个“微服务”,之前我们所说的Pod.RC等资源 ...