首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >增强了循环性能

增强了循环性能
EN

Stack Overflow用户
提问于 2012-08-28 09:05:01
回答 4查看 3.3K关注 0票数 5

关于这件事,我和我的朋友发生了争执。考虑下面的代码片段,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(i=0; i<someList.size(); i++) {
    //some logic
    }

在这里,每次迭代都会执行someList.size(),因此建议将此大小计算迁移到循环外部(在循环之前)。

现在,当我使用像这样的扩展for循环时,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(SpecialBean bean: someBean.getSpecialList()) {
//some logic
}

是否有必要将someBean.getSpecialList()移到循环之外?如果我保留第二个代码片段,someBean.getSpecialList()将执行多少次?

EN

回答 4

Stack Overflow用户

发布于 2012-08-28 09:10:12

出自Joshua Bloch在Effective Java中的项目46 :

版本1.5中引入的

-each循环通过完全隐藏迭代器或索引变量,消除了混乱和出错的机会。由此产生的习惯用法同样适用于集合和数组:

//迭代集合和数组的首选习惯用法是(Element e: elements) { doSomething(e);}当您看到冒号(:)时,将其读作“in”。因此,上面的循环读作“for each element e in elements”。请注意,使用for-each循环不会造成性能损失,即使对于数组也是如此。事实上,在某些情况下,与普通的for循环相比,它可能会提供轻微的性能优势,因为它只计算一次数组索引的限制。虽然您可以手动完成此操作(第45项),但程序员并不总是这样做。

另请参阅is-there-a-performance-difference-between-a-for-loop-and-a-for-each-loop

票数 4
EN

Stack Overflow用户

发布于 2012-08-28 09:07:37

for each变体将如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (Iterator i = c.iterator(); i.hasNext(); ) {
doSomething((Element) i.next()); 
}

来自项目46:首选for-each循环,而不是Effective的传统for循环

与传统的

循环相比,for-each循环在清晰度和错误预防方面提供了引人注目的优势,并且没有性能损失。你应该在你能用的地方使用它。

所以我的第一个猜测是错误的,在for each循环中使用函数没有惩罚。

票数 0
EN

Stack Overflow用户

发布于 2012-08-28 09:10:00

第一个代码段的替代方法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(i=0, l=someList.size(); i<l; i++) {
    //some logic
}

关于for..each循环,对getSpecialList()的调用将只进行一次(您可以通过在方法中添加一些调试/日志记录来验证这一点)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12155987

复制
相关文章
WordPress 5.9 增强了懒加载的性能
WordPress 在 5.5 版本实现了图片延迟加载(懒加载),然后在 5.7 版中扩展到 iframe 中,WordPress 5.9 版本又对延迟加载的实现进行了一些微调以提高性能。
Denis
2023/04/13
7530
高性能无锁并发框架Disruptor,太强了
Disruptor是一个开源框架,研发的初衷是为了解决高并发下队列锁的问题,最早由LMAX提出并使用,能够在无锁的情况下实现队列的并发操作,并号称能够在一个线程里每秒处理6百万笔订单
愿天堂没有BUG
2022/09/08
1.5K0
高性能无锁并发框架Disruptor,太强了
高性能无锁并发框架 Disruptor,太强了!
Disruptor是一个开源框架,研发的初衷是为了解决高并发下队列锁的问题,最早由LMAX提出并使用,能够在无锁的情况下实现队列的并发操作,并号称能够在一个线程里每秒处理6百万笔订单
Java技术栈
2020/09/22
3.4K0
高性能无锁并发框架 Disruptor,太强了!
不看全图看局部,CNN性能竟然更强了
鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI 不给全图,只投喂CNN一些看上去毫无信息量的图像碎片,就能让模型学会图像分类。 更重要的是,性能完全不差,甚至还能反超用完整图像训练的模型。 这么一项来自加州大学圣塔芭芭拉分校的新研究,这两天引发不少讨论。 咋地,这就是说,CNN根本无需理解图像全局结构,一样也能SOTA? 具体是怎么一回事,咱们还是直接上论文。 实验证据 研究人员设计了这样一个实验: 他们在CIFAR-10、CIFAR-100、STL-10、Tiny-ImageNet-200以及I
量子位
2022/06/08
2840
不看全图看局部,CNN性能竟然更强了
不看全图看局部,CNN性能竟然更强了
点击上方↑↑↑“OpenCV学堂”关注我来源:公众号 量子位  授权 不给全图,只投喂CNN一些看上去毫无信息量的图像碎片,就能让模型学会图像分类。 更重要的是,性能完全不差,甚至还能反超用完整图像训练的模型。 这么一项来自加州大学圣塔芭芭拉分校的新研究,这两天引发不少讨论。 咋地,这就是说,CNN根本无需理解图像全局结构,一样也能SOTA? 具体是怎么一回事,咱们还是直接上论文。 实验证据 研究人员设计了这样一个实验: 他们在CIFAR-10、CIFAR-100、STL-10、Tiny-ImageNe
OpenCV学堂
2022/06/09
3100
不看全图看局部,CNN性能竟然更强了
【链表】双向循环带头链表-增-删-查(C语言)
---- ---- 单链表存在的缺陷: 不能从后往前走, 找不到他的前驱, 指定位置 删除 增加 尾删 都要找前一个,时间复杂度都是O(n) ---- 针对上面的这些缺陷的解决方案——双向链表。 ---- 实际中要实现的链表的结构非常多样,以下情况组合起来就有8种链表结构: 单向、双向 带头、不带头——带哨兵位的头结点,这个结点不存储有效数据,好处是什么?尾插的判断更方便简单,带头就不需要二级指针了,(带头结点,不需要改变穿过来的指针,也就是意味着不需要传二级指针了。) 循环、非循环 ---- 无头单向非循
半生瓜的blog
2023/05/12
2980
【链表】双向循环带头链表-增-删-查(C语言)
Go代码重构:23倍的性能爆增
几周前,我读了一篇名为“ Good Code vs Go Code中的错误代码 ”的文章,作者指导我们逐步完成实际业务用例的重构。
sunsky
2020/08/20
7130
开始变强了!
大家好,我是鱼皮,昨天刚刚公开了自己的 编程知识星球 ,就吸引了一大波想坚持学习编程、持续获得进步的朋友。目前星球人数已达 2000,鱼皮真的非常感谢大家的支持!
程序员鱼皮
2022/04/08
8350
开始变强了!
Python中的循环-比较和性能
Python是当今最受欢迎的编程语言之一。这是一种具有优雅且易读语法的解释性高级语言。但是,Python通常比Java,C#尤其是C,C ++或Fortran慢得多。有时性能问题和瓶颈可能会严重影响应用程序的可用性。
计算机与AI
2020/12/14
3.4K0
Python中的循环-比较和性能
Java集合循环性能比较
Java开发人员通常处理ArrayList和HashSet等集合。Java 8附带了lambda和streaming API,帮助我们轻松处理集合。在大多数情况下,我们只处理几千个条目的集合,而性能并不重要。但是,在某些极端的情况下,当我们不得不多次超过数百万件条目的集合时,性能就会变得很糟糕。
程序你好
2018/07/23
8990
性能优化-多层嵌套for循环如何优化
代码示例 package com.cwl.po; /** * @program: cwl-performance-optimization * @description: 测试for循环-嵌套循环 * @author: ChenWenLong * @create: 2019-11-22 11:27 **/ public class TestNestedLoop { // 当需要嵌套循环时 外层循环越小 性能越好 // 例如 10*100*1000 与 1000*100*10
cwl_java
2019/11/29
3.5K0
性能优化-测试for循环中的反射操作
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/11/28
6400
java 优雅代码for循环 之性能调优
大家在工作中,用到最多的就是for循环了,但是你知道如何写for循环可以提高系统的性能呢? 我从以下几个方面对如何写for循环给大家几个事例,希望可以帮到你们
gfu
2019/08/28
1.8K0
java每日一练(19_04_08)|运算符、循环—— for、++自增
“When I dare to be powerful – to use my strength in the service of my vision, then it becomes less and less important whether I am afraid.” ——Audre Lorde
微笑的小小刀
2019/05/31
8580
华为,这也太强了吧..
真的没想到... 1 黑马 大家知道,我是一个云服务器爱好者,毕竟做个人站长也快十几年了,一直在使用各种云服务产品。 最近我研究了一下,中国云服务市场近5年的市场份额变化,其中有一家公司特吸引眼球。 这个公司就是华为。 给大家看看数据吧,2017年,中国公有云市场华为云排在前十名之外,2018年,提升至第八,如今排名中国第二。 硬生生,华为成为中国公有云市场中最大一匹黑马。 大家估计也挺好奇,华为这 5 年都做了什么,从一个市场份额 Others 到现在中国第二。 再给大家看一个数据,全球有云计算
纯洁的微笑
2022/06/09
4670
华为,这也太强了吧..
循环查询数据的性能问题及优化
糟糕的代码,对代码维护、性能、团队协作都会造成负面影响,所以,先设计再实现,谋而后动。
王知无-import_bigdata
2020/06/06
3.5K0
干货|MySQL增、删、改查性能优化的10个小技巧
  上一篇介绍了4种进行MySQL性能优化排查的小技巧,本篇就通过从增、删、改、查的语法中如何进行优化,帮助大家更好理解MySQL语法,进行性能优化。
IT学习日记
2022/09/13
1.8K0
干货|MySQL增、删、改查性能优化的10个小技巧
mysql 自增id和UUID做主键性能分析,及最优方案
UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。另外我们也可以在e2fsprogs包中的UUID库找到实现。
wuweixiang
2018/08/14
8.5K0
mysql 主键自增语句_MySQL 自增主键[通俗易懂]
每次插入一条数据,其 ID 都是比上一条插入的数据的 ID 大,就算上一条数据被删除。
全栈程序员站长
2022/07/18
10.9K0
测试性能(Java 8 的循环和Java 7 的循环耗时的对比测试)
说高级的stream就是那个并行流。下面是那个并行流的简单实现。只要是继承Collection类的都可以这么用。
一觉睡到小时候
2019/07/03
1.6K0
测试性能(Java 8 的循环和Java 7 的循环耗时的对比测试)

相似问题

使用数组增强了for循环

30

javascript在for循环中增强了

33

用循环反应,自增

22

增强了字符串的For循环

32

增强了C++中的FOR循环

72
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文