详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt224

我们常用for循环,foeach,while等作为循环list或者数组的方式,但是大家有没有真正考虑过他们之间的性能差异呢,以下我来给大家分析下:

List<String> list = new ArrayList<String>();

for(int i=0;i<5000000;i++) {

list.add( "grefr");

}

long time1 = System.nanoTime();

for(int i = 0;i<5000000;i++) {

String str = list.get(i);

}

long time2 = System.nanoTime();

System. out.println("for循环使用时间" +(time2-time1));

long time3 = System.nanoTime();

for(String str:list) {

}

long time4 = System.nanoTime();

System. out.println("foreach循环使用时间" +(time4-time3));

long time5 = System. nanoTime();

Iterator<String> iterator = list.iterator();

while(iterator.hasNext()) {

String str = iterator.next();

}

long time6 = System.nanoTime();

System. out.println("迭代器循环使用时间" +(time6-time5 ));

long time7 = System.nanoTime();

for( Iterator<String> iterator2 = list.iterator();iterator2.hasNext();) {

String str = iterator2.next();

}

long time8 = System.nanoTime();

System. out.println("for改装的迭代器循环使用时间" +(time8-time7));

long time9 = System. nanoTime();

int i = -1;

while(i++<list.size()-1) {

String str = list.get(i);

}

long time10 = System. nanoTime();

System. out.println("while循环使用时间" +(time10-time9));

这段代码执行的结果是:

for循环使用时间           84835391

foreach循环使用时间       171477032

迭代器循环使用时间         175461419

for改装的迭代器循环使用时间 168014315

while循环使用时间         112974805

很显然,在遍历List时for循环的遍历效率要更高

但是在下面的遍历中,

int num = 1000000;

long time1 = System.nanoTime();

for(int i = 0;i<num;i++ ) {

}

long time2 = System.nanoTime();

System. out.println(time2-time1);

long time3 = System.nanoTime();

while(num-->0) {

}

long time4 = System.nanoTime();

System. out.println(time4-time3);

运行结果如下:

for循环执行时间为:  7163405

while循环执行时间为:3595701

java 比较几种常见循环方式的优劣的更多相关文章

  1. java讲讲几种常见的排序算法(二)

    java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点( ...

  2. java讲讲几种常见的排序算法

    java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...

  3. Linux下几种常见压缩方式测试对比

    目录 Linux下几种常见压缩方式测试对比 参考 简介 测试 总结 Linux下几种常见压缩方式测试对比

  4. Redis 的几种常见使用方式

    常见使用方式 Redis 的几种常见使用方式包括: Redis 单副本 Redis 多副本(主从) Redis Sentinel(哨兵) Redis Cluster Redis 自研 各种使用方式的优 ...

  5. 【Java面试】Java有几种文件拷贝方式,哪一种效率最高?

    "Java有几种文件拷贝方式,哪一种效率最高?" 这个问题是京东一面的时候,针对4年经验的同学的一个面试题. 大家好,我是Mic,一个工作了14年的Java程序员. 关于这个问题的 ...

  6. java中的线程(2):如何正确停止线程之3种常见停止方式

    1.常见停止方式 自定义线程,其中含退出标志位,在run中判断它. 使用interrupt()方法中断线程 使用stop方法暴力终止(已经弃用) 2.使用标志位 class TestThread ex ...

  7. java中的线程(2):如何正确停止线程之2种常见停止方式

    1.常见停止方式 结束run函数,run中含退出标志位. 使用interrupt()方法中断线程 使用stop方法暴力终止(已经弃用) 2.结束run class TestThread extends ...

  8. java之 ------ 几种常见的简单设计模式

    前言: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.用于解决特定环境下.反复出现的特定问题的解决方式.使用设计模式是为了可重用代码.让代 ...

  9. Java中9种常见的CMS GC问题分析与解决

    1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...

随机推荐

  1. 移动APP云测试平台测评分析

    随着智能手机的普及率和渗透率越来越高,App开发软件也越来越多.有专家预测,2017年的App应用下载量将会突破2500亿,整个移动科技市场规模将会达到770亿美元.身处在这个"移动&quo ...

  2. 移动端300ms点击事件的延迟

    移动端click事件300ms延迟 移动端click事件300ms的延迟在目前看来,已经是老生常谈了. 以下内容,我会在参考资源的基础上谈谈我对移动端click事件300ms延迟的一些理解.本人愚昧, ...

  3. Python序列化和反序列化

    Python序列化和反序列化 通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长.并且需要时可以再次将这个对象读取出来.Python中有几个常用模块可实现这一功 ...

  4. Android的ListView

    ListView ListView 是一个控件,一个在垂直滚动的列表中显示条目的一个控件,这些条目的内容来自于一个ListAdapter. 一个简单的例子 布局文件里新增ListView <Li ...

  5. [补档]Password

    Password 题目 Rivest是密码学专家.近日他正在研究一种数列E = {E[1],E[2],--,E[n]},且E[1] = E[2] = p(p为一个质数),E[i] = E[i-2]×E ...

  6. js 重载(overload)

    1.js中不支持重载的语法.(因为js不允许多个同名函数存在) 解决:使用arguments类数组对象接收调用时所有传入的参数值. 2. arguments可以使用length属性,通过下标访问,不能 ...

  7. HttpRequest 类

    关于此类的介绍:查看HttpRequest类 点击查看:HttpRequest中方法的封装 跟这个类对应的HttpResponse类 定义:使 ASP.NET 能够读取客户端在 Web 请求期间发送的 ...

  8. React Native 系列(六) -- PropTypes

    前言 本系列是基于React Native版本号0.44.3写的.在我们之前的通过props实现组件间传值的时候,大家有没有发现在父组件传递值过去,在子控件获取props的时候没有提示,那么如何能实现 ...

  9. C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

  10. iOS开发 Android开发 移动Web开发

    通常,来自移动端的测试需求涉及2类: iOS/Android 移动端H5 因此,需要把基础的概念清清楚楚地落地 Client端 Server端 平台描述 语言 相同 差别 / web平台 web平台开 ...