java 测试:iterator foreach for 三种迭代方式哪种更快?

代码:

public class main {
    public static void main(String[] p_args){
        ArrayList<String> _l_string = new ArrayList<>();
        for (int o_a = 0; o_a < 100000; o_a++) {
            _l_string.add(String.valueOf(o_a));
        }
        c_public_countTime _countTime = new c_public_countTime();
        _countTime.f_begin();
        for (int i = 0; i < _l_string.size(); i++) {
            System.out.print(_l_string.get(i));
        }
        String _time_for = _countTime.f_done();
        _countTime.f_begin();
        for (String o_a :
                _l_string) {
            System.out.print(o_a);
        }
        String _time_foreach = _countTime.f_done();
        _countTime.f_begin();
        for (Iterator<String> o_iterator = _l_string.iterator(); o_iterator.hasNext();) {
            System.out.print(o_iterator.next());
        }
        String _time_iterator = _countTime.f_done();

        System.out.println("\niterator:" + _time_iterator + "\nfor:" + _time_for + "\nforeach:" + _time_foreach );
    }
}

结果:可能是由于 java 内部执行的原因,不同的顺序造成的时长也各不相同,这里采集了一点数据样本。

(速度、先后顺序、时长)

#2 for:354 毫秒

#1 foreach:263 毫秒

#3 iterator:425 毫秒

小结:for 之后的 foreach 增加了速度。

=

#1 for:285 毫秒

#2 iterator:301 毫秒

#3 foreach:363 毫秒

小结:for 首次出场也获得了最快速度。

===

#3 foreach:517 毫秒

#1 for:285 毫秒

#2 iterator:478 毫秒

小结:foreach 首次出场速度不佳,for 速度跟首次出场速度一致。

=

#3 foreach:416 毫秒

#1 iterator:317 毫秒

#2 for:321 毫秒

小结:即使在 iterator 获得最快速度的时候,for 也有几乎没有差别的速度。

===

#2 iterator:396 毫秒

#3 foreach:415 毫秒

#1 for:253 毫秒

小结:for 在最后出场的时候获得了最快速度。

===

#3 iterator:417 毫秒
#1 for:332 毫秒
#2 foreach:334 毫秒

小结:for 获得了最佳速度。

总结:iterator 和 foreach 并不会提高迭代的速度。所以应该通过必要的理由来使用它们,否则还是默认 for 比较快。

时间: 2024-08-26 18:54:23

java 测试:iterator foreach for 三种迭代方式哪种更快?的相关文章

细说java中Map的两种迭代方式

以前对java中迭代方式总是迷迷糊糊的,今天总算弄懂了,特意的总结了一下,基本是算是理解透彻了. 1.再说Map之前先说下Iterator: Iterator主要用于遍历(即迭代访问)Collection集合中的元素,Iterator也称为迭代器.它仅仅只有三个方法:hasNext(),next()和remove() hasNext():如果仍有元素可以迭代,则返回 true.(换句话说,如果 next 返回了元素而不是 抛出异常,则返回 true). next():返回迭代的下一个元素. re

LVS三种工作方式八种算法

一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集群计算机通常用来改进单个计算机的计算速度和/或可靠性.一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多. 集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完一个任务 LVS在企业架构中的位置: 以上的

python3几种迭代方式速度对比

在python学习手册上看到的,比较实用,测试包括两个文件: MyTimer.py:一个简单的函数计时器 test.py:测试5中迭代方式 MyTimer.py文件: __author__ = 'lmw'import timereps = 1000#函数重复次数repslist = range(reps) def timer(func,*pargs,**kargs): # func函数名称,后面两个是参数 start = time.clock() # 开始时间 for i in repslist

LVS原理详解(3种工作方式8种调度算法)

一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集群计算机通常用来改进单个计算机的计算速度和/或可靠性.一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多. 集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完一个任务 LVS在企业架构中的位置: 以上的

selenuim中18种定位方式

18种定位方式=8种单数形式+8种复数形式+2种底层方案 单数可以确定唯一,复数无法确定: 单数形式定位,返回的是一个元素,复数形式,返回的是一个列表,返回的是当前页面所有符合要求的元素,没有意义 一.8种单数形式: 1.通过id属性定位,driver.find_element_by_id('i1'),定位之后操作页面上的数据driver.find_element_by_id('i1').send_keys('123123') 2.通过class属性定位,并向该属性写内容 3.通过name属性定

项目案例模板之jdbc两种连接方式

项目案例模板之jdbc两种连接方式 第一种连接方式 JDBCUtils.java package jdbc; ? import org.junit.jupiter.api.Test; ? import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; ? public class JDBCUtils { public static Connection connection; pri

Android -- service两种启动方式startService与bindService

继上一篇文章,Android – Service的使用,我们来继续看看Service的两种启动方式 第一种startService . 运行代码,得知以下几点结论: 我们了解它的启动周期为onCreate->onStartCommand,如图 当退出应用后,后台的Service进程仍然存在,未被销毁 当点击多次startService时,如图我点击了3次,你会发现onCreate方法只创建了一次. stopService,如图 第二种bindService 运行代码得知以下结论: 点击bindS

for 、foreach 、iterator 三种遍历方式的比较

习惯用法 for.foreach循环.iterator迭代器都是我们常用的一种遍历方式,你可以用它来遍历任何东西:包括数组.集合等 for 惯用法: List<String> list = new ArrayList<String>(); String[] arr = new String[]{"1,2,3,4"}; for(int i = 0;i < arr.length;i++){ System.out.println(arr[i]); } for(i

二、C++迭代器的两种实现方式 (Range for和C#、Java中的foreach)

一.迭代器概述 这个标题其实有点"标题党"的含义,因为C++在标准库中的实现迭代器的方式只有一种,也就是为类定义begin()和end()函数,C++11增加了range for语句,可以用来遍历迭代器中的元素.实现迭代器的第二种方式,就是用C++模拟C#和Java中的迭代器模式,并且我们可以定义出自己的foreach语句.除此之外,迭代器可能还有很多种实现的方法,各个库也会多自己的迭代器的实现有所定义,在这里只要明白迭代器的本质意义即可. 迭代器,也称作游标,是一种设计模式,我们可以