为什么Java的foreach比for慢??

本文通过具体代码示例对比了JDK1.5中foreach循环与for循环的执行效率,并针对不同集合类型如ArrayList和LinkedList进行了分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做了简单测试,发现jdk1.5的foreach执行效率比for慢,有些不解,看网上贴子C#的foreach比for要快的
难道是哪用的不对

两个循环代码:
        List<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<5    000000;i++){
            list.add(11);
        }
        long a = System.currentTimeMillis();
        int b= list.size();
        int c=1;
        for(int i=0;i<b;i++){
            c = list.get(i);
        }
        System.out.println(System.currentTimeMillis()-a);
       
   
        List<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<5    000000;i++){
            list.add(11);
        }
        long a = System.currentTimeMillis();
        for(int bb:list){
          
        }
        System.out.println(System.currentTimeMillis()-a);
阅读(3680) | 评论(2) | 转发(0) |
0

上一篇:linux终端--rxvt

下一篇:CORBA入门

给主人留下些什么吧!~~

chinaunix网友2009-02-26 18:26:13

果然~~~

cuichaox2007-12-15 20:56:01

使用LinkedList试试 有以下猜测: (1)for是使用下标(偏移量)定位的. (2)foreach应该是使用类似循环子的机构 (3)对随机访问效率高的ArrayList. 使用下标访问效率本身很高.foreach内部的循环子直接封装下标,自己实现的for比foreach更直接,效率稍高些,但差别不会太大,仍然在一个数量级上。 (4)如果使用插入和删除效率高的LinkedList,for基于下标访问会每次从头查询,效率会很低.foreach循环子使用高效的地址运算,效率会高.其差距将很大,完全不在一个数量级别.如果数组很大,差别可能会几百甚至上千倍.

评论热议
Java中的for循环在处理量数据时可能会变得很。为了优化for循环的执行速度,可以使用多线程和线程池来实现并行执行。引用中的第三种方法使用了并行流的方式来处理循环,可以通过.parallelStream()方法将列表转换为并行流,然后使用forEach()方法来遍历并打印每个元素。这种方法可以有效地利用多个线程来处理循环,提高执行速度。 另外,引用中的第二种方法使用了线程池来处理循环。首先创建一个固定小的线程池,然后使用execute()方法提交任务给线程池处理。每个任务都会在一个独立的线程中执行,并通过Runnable接口的run()方法来打印元素。最后,使用线程池的shutdown()方法来关闭线程池。 引用中的第一种方法也使用了线程池来优化循环执行。在这种方法中,通过定义一个Semaphore来控制并发线程的数量,创建一个固定小的线程池,并使用execute()方法提交任务给线程池处理。每个任务通过Runnable接口的run()方法来打印元素,并通过Semaphore.release()方法释放许可。这种方法可以确保并发线程数量不超过指定的数量。 综上所述,如果for循环太,可以考虑使用并行流或线程池来优化执行速度。具体选择哪种方法取决于实际需求和系统配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [java--for循环java多线程优化](https://blog.youkuaiyun.com/weixin_44951291/article/details/128166958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值