范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

对于Java中的For循环和Foreach,哪个更快

  Which is Faster For Loop or For-each in Java
  对于Java中的For循环和Foreach,哪个更快
  通过本文,您可以了解一些集合遍历技巧。
  Java遍历集合有两种方法。一个是最基本的for循环,另一个是jdk5引入的for each。通过这种方法,我们可以更方便地遍历数组和集合。但是你有没有想过这两种方法?哪一个遍历集合更有效?  for-each实现方法
  For-each不是一种新语法,而是Java的语法糖。在编译时,编译器将此代码转换为迭代器实现,并将其编译为字节码。  语法糖:
  语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
  我们可以通过执行命令 javap-verbose-Testforeach 反编译以下编译代码: public class TestForeach {    List integers;    public void testForeach(){        for(Integer i : integers){        }    }}
  获得的详细字节码如下:  public void testForeach();    descriptor: ()V    flags: ACC_PUBLIC    Code:      stack=1, locals=3, args_size=1         0: aload_0         1: getfield      #2                  // Field integers:Ljava/util/List;         4: invokeinterface #3,  1            // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;         9: astore_1        10: aload_1        11: invokeinterface #4,  1            // InterfaceMethod java/util/Iterator.hasNext:()Z        16: ifeq          32        19: aload_1        20: invokeinterface #5,  1            // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;        25: checkcast     #6                  // class java/lang/Integer        28: astore_2        29: goto          10        32: return      LineNumberTable:        line 11: 0        line 13: 29        line 14: 32      LocalVariableTable:        Start  Length  Slot  Name   Signature           29       0     2     i   Ljava/lang/Integer;            0      33     0  this   Ltest/TestForeach;}
  此字节码的一般含义是使用 getfileld 命令来获取integers 变量并且调用List.iterator 来获取迭代器实例和调用iterator.hasNext 。如果返回true ,调用iterator.next 方法。
  请看,这是迭代器遍历集合的实现逻辑。  基准测试
  现在让我们使用for循环方法和for-each方法进行测试。  public class ForLoopTest {    public static void main(String[] args) {        List arrayList = new ArrayList<>();        for (int i = 0; i < 10000000; i++) {            arrayList.add(i);        }        long arrayListStartTime = System.currentTimeMillis();        for (int i = 0; i < arrayList.size(); i++) {            arrayList.get(i);        }        long arrayListCost =System.currentTimeMillis()-arrayListStartTime;        System.out.println("ArrayList for loop traversal cost: "+ arrayListCost);        long arrayListForeachStartTime = System.currentTimeMillis();        for (Integer integer : arrayList) {        }        long arrayListForeachCost =System.currentTimeMillis()-arrayListForeachStartTime;        System.out.println("ArrayList foreach traversal cost: "+ arrayListForeachCost);
  这是测试结果:
  如你所见,结果是显而易见的。对于ArrayList,使用For循环方法的性能优于For each方法。
  我们可以说for循环比for-each好吗?
  答案是否定的。在下一个基准测试中,我们将ArrayList更改为LinkedList。 同样,这里是测试结果。
  原因分析
  一些初学者可能想知道为什么ArrayList使用for循环方法遍历得更快,而LinkedList则更慢,速度也非常慢?
  这由ArrayList和LinkedList数据结构决定。 ArrayList底层使用数组存储元素。数组是连续的内存空间。数据可以通过索引获得。时间复杂度为O(1),因此速度很快。
  LinkedList的底层是一个双向链表。使用for循环实现遍历,每次都需要从链表的头节点开始。时间复杂度为O(n*n)。  结论使用ArrayList时,for循环方法更快,因为for-each由迭代器实现,并且需要执行并发修改验证。  使用LinkedList时,for-each比for循环快得多,因为LinkedList是通过使用双向链表实现的。每个寻址都需要从头节点开始。如果我们需要遍历LinkedList,我们需要避免使用for循环。  使用迭代器模式,for-each不需要关心集合的具体实现。如果需要替换集合,无需修改代码即可轻松替换。
  公众号地址:对于Java中的For循环和Foreach,哪个更快

95大暴跌!中国欠债最高的企业彻底玩完这样去避免核级炸弹杠杆是把双刃剑,耍的好会让自己或公司短时间出现跨越式发展耍不好则会落入到万劫不复之中难于翻身。中国过去20年多年来每年的首富,基本都是靠杠杆快速吹胀起来的,特别是房地产行业的首富更维金斯一边立FLAG一边表忠心,就看拉科布愿意掏多少钱留下他今日,勇士前锋维金斯参加了卡特的节目TheVCShow,在节目中他谈到了总决赛最后两分钟的感受时,维金斯说道你知道自己是个总冠军了,但是这种感觉非常不真实,我没办法解释,我真的没办四款性能强发热低的手机,而且价格还不贵对于老刘来说,在一款手机的产品力维度中,我最看重的还是性能,其次是发热,只有那些性能强发热又不高的机型,才能给我很好的感受。表面看起来,有那么一点唯性能论,但从如今常用APP的情况四款性能强发热低的手机,而且价格还不贵对于老刘来说,在一款手机的产品力维度中,我最看重的还是性能,其次是发热,只有那些性能强发热又不高的机型,才能给我很好的感受。表面看起来,有那么一点唯性能论,但从如今常用APP的情况曝光iPhone14Pro外观渲染图,iPhone13跌至大米价快快欢呼疯抢iPhone14Pro的外观渲染图确实带来了很多的改变和惊喜,对于想体验完整版iPhone的用户,这个版本应该是近几年变化较大的一次了。值得一提的是,由于iPhone14新机的曝光曝光iPhone14Pro外观渲染图,iPhone13跌至大米价快快欢呼疯抢iPhone14Pro的外观渲染图确实带来了很多的改变和惊喜,对于想体验完整版iPhone的用户,这个版本应该是近几年变化较大的一次了。值得一提的是,由于iPhone14新机的曝光散文且等凉风吹,且惜秋日长作者子墨秋日黄昏,一场雨,消退了炙热,一点点褪去了青绿,有了青黄的模样,等秋风一丝丝吹过来,便也有了萧瑟。秋风今又是。有秋风陪伴,手边依旧是一杯茶,一卷书,和身边零零落落的寂寞,天散文秋叶深深关于节气,我们更多的是想象,想象古人安静诗意的生活,祖先的模样,尤其是到了新凉如水的清秋,望到果实,看见落叶,未觉池塘春草梦,阶前梧叶已秋声。月白风清的秋夜,采摘一枚香橼是一件古典散文且等凉风吹,且惜秋日长作者子墨秋日黄昏,一场雨,消退了炙热,一点点褪去了青绿,有了青黄的模样,等秋风一丝丝吹过来,便也有了萧瑟。秋风今又是。有秋风陪伴,手边依旧是一杯茶,一卷书,和身边零零落落的寂寞,天散文秋叶深深关于节气,我们更多的是想象,想象古人安静诗意的生活,祖先的模样,尤其是到了新凉如水的清秋,望到果实,看见落叶,未觉池塘春草梦,阶前梧叶已秋声。月白风清的秋夜,采摘一枚香橼是一件古典踏上从广东到云南的摩旅,什么是摩旅的意义?骑摩托车去旅行是不是找罪受?摩旅到底有什么意义,日晒雨淋的携带不了太多的东西,也只能带一个人,我内心带着疑问开始了这一场从广东到云南,跨越四省的摩旅。有人说不去冒雨骑行,去感受淋雨
什么叫中国式家庭的悲哀?公交车上的一家三口展现得淋漓尽致妈妈应该是都很爱孩子的,但是,我们身边许多女性朋友都表示,是坚决不会生二胎生三胎的。一个孩子都够忙的了,一个孩子都教育不好,生那么多孩子有什么用?不过是给自己徒增烦恼罢了。妈妈教育孩子刷牙的九大疑惑一次性说清楚你知道婴幼儿应该从何时开始刷牙吗?孩子不适应牙膏的味道怎么办?孩子多大时应该看牙医?作为孩子爸妈,您一定有很多很多问号。别着急,针对家长们的9大疑惑,北京协和医院儿科医生打包交代给教育最大的危险,是指望孩子自觉家长是孩子的第一任老师,也是孩子终生的老师,所以家长的教育对孩子的成长至关重要。在教育路上,最不该偷懒的是家长,最不该放养的是孩子。01hr教育最忌讳的,就是父母怕麻烦。一位作家说住宿时候应该注意某某节虽然了,相关注意事项,别怪本人没有提前告知大家。随着旅游业的不断发展,其实相关的产业也变得越来越惊奇。住宿行业有很大的竞争压力,无论我们外出旅游,或者是出差公务的时候,都避免弹性办公是大势所趋吗据媒体日前报道,某在线旅游平台宣布将从下个月起在全公司推行混合办公,即每周三周五员工可选择在家远程办公。据透露,32工作制将无差别覆盖公司所有员工,且不做薪资调整。居家办公看似可以同型半胱氨酸高挂哪个科的号很多人体检或看病时发现生化里的同型半胱氨酸增高,不太清楚同型半胱氨酸增高是什么原因造成的,到医院就诊时应该挂哪个科的号。同型半胱氨酸是一种血液生化指标,同型半胱氨酸是1932年被发2022新生儿名字库名字影响着一个人的未来发展,好的名字可以助运孩子的未来。2022年想必会有许多新生的虎宝宝出生,不少新晋的虎爸虎妈们不知道要如何给新生的宝宝起名字,因此特意为大家整理并分享了这篇关取个英文名,一不小心就可能沦为笑柄,在外国人眼里你叫二妞英语作为世界上应用最广泛的语言,很多国家都将其作为第二语言,纳入学校课本中。我国的学生在初学英语时,课本上多出现人物对话,MaryBobMike等也成为学生最初熟知的外国人名字。在32岁宝妈自体脂肪填充50天,亲戚以为我悄悄地换了一张脸一张好看饱满的脸部给人的第一印象就会很好,当下很多人都说着心灵美,但是没有一张好的面部,真的会有人去愿意了解你的内心吗?很多粉丝说想看没有美颜的手术恢复之路,今天这位宝妈满足你们的孩子无理取闹撒泼打滚,其实3步就能解决春节假期刚过,同事小蔡一上班就抱怨道在家带娃7天,比上7天班还累!原来,假期期间,小蔡5岁的儿子总是各种无理取闹,让小蔡头疼不已。比如,去亲戚家拜年,明明快要吃午饭了,儿子却吵着要春天进补,宁可不吃肉也要吃它,鲜嫩营养比肉香,孩子补钙身体棒春天进补,宁可不吃肉也要吃它,鲜嫩营养比肉香,孩子补钙身体棒。春天正值万物复苏的时候,此时人体阳气萌动新陈代谢加快,这时候不注意春天饮食的进补,身体很容易造成营养不良。所以,春天正