社区
Java SE
帖子详情
如下情况,怎么写代码的效率更高?
thinke365
2008-08-26 09:28:14
定义为:
Collection<E> c;
Iterator<E> iter = c.iterator();
现在要求对c中的元素进行遍历,下面两种,哪种效率更高?为什么?
1
while(iter.hasNext()) {
E temp = iter.next();
// some operations
}
2
E temp;
while(iter.hasNext()) {
temp = iter.next();
// some operations
}
...全文
280
33
打赏
收藏
如下情况,怎么写代码的效率更高?
定义为: Collection c; Iterator iter = c.iterator(); 现在要求对c中的元素进行遍历,下面两种,哪种效率更高?为什么? 1 while(iter.hasNext()) { E temp = iter.next(); // some operations } 2 E temp; while(iter.hasNext()) { temp = iter.next(); // some operations }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
33 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
vamvin_55
2008-08-28
打赏
举报
回复
纯效率来说的话
下面的那个好点...
lawincy
2008-08-28
打赏
举报
回复
这种代码有比较意义没?还谈什么效率呀,第二个顶多在函数里多了4个字节的引用,第一个只是在for里面每次增加4个字节的引用(在没被GC之前)。要论效率,肯定是第二个要高点点,但是没意义,并且对栈的操作次数是一样的。
syzhwh
2008-08-27
打赏
举报
回复
第一个好,编程少写了temp;这几个字符:)
zhj92lxs
2008-08-27
打赏
举报
回复
[Quote=引用 6 楼 bao110908 的回复:]
我认为下面这种方式更好,同时限制了迭代器的局部变量作用域。
Java codefor(Iterator<E>i=c.iterator(); i.hasNext(); ) {
E temp=i.next();
}
[/Quote]
支持
dln1234
2008-08-27
打赏
举报
回复
其实差别都不大,看个人喜欢了。萝卜咸菜各有所爱
fengyuleidian3
2008-08-27
打赏
举报
回复
[Quote=引用 28 楼 lisl2003 的回复:]
引用 26 楼 hunterzhang0812 的回复:
给你们再做个测试,看看会得到什么结果
List l = new ArrayList();
POJO p;
for (int i=0; i <10; i++) {
p = new POJO;
l.add(p);
}
for (int i=0; i <10; i++) {
POJO p = new POJO;
l.add(p);
}
看看得到的这两个LIST内容有什么区别没有...
汗,这个例子举的……
[/Quote]
呵呵!
mengweilil
2008-08-27
打赏
举报
回复
我不知道pojo是啥。。。。。只好用Integer代替了,打出来是一样的东西
lisl2003
2008-08-27
打赏
举报
回复
[Quote=引用 26 楼 hunterzhang0812 的回复:]
给你们再做个测试,看看会得到什么结果
List l = new ArrayList();
POJO p;
for (int i=0; i <10; i++) {
p = new POJO;
l.add(p);
}
for (int i=0; i <10; i++) {
POJO p = new POJO;
l.add(p);
}
看看得到的这两个LIST内容有什么区别没有...
[/Quote]
汗,这个例子举的……
cwjieNo1
2008-08-27
打赏
举报
回复
我喜欢后一个·~
mengweilil
2008-08-27
打赏
举报
回复
ls的,pojo是啥东西?
wolfgang_l
2008-08-27
打赏
举报
回复
[Quote=引用 3 楼 hqbobo 的回复:]
后一个吧
少了一个定义..
[/Quote]
sxn19811006
2008-08-27
打赏
举报
回复
1
ZangXT
2008-08-27
打赏
举报
回复
[Quote=引用 16 楼 lgg201 的回复:]
不知道这个和基础数据类型复杂数据类型有没有关系?
比如E是一个自定义类型呢?
类型复杂度的提高+海量数据不知道哪个更优,没有环境,提出来大家看看.
[/Quote]
不会差别很大,因为E temp;语句不涉及到创建对象.具体操作都在循环里了
goosman
2008-08-27
打赏
举报
回复
不知道这个和基础数据类型复杂数据类型有没有关系?
比如E是一个自定义类型呢?
类型复杂度的提高+海量数据不知道哪个更优,没有环境,提出来大家看看.
haoxiongok
2008-08-27
打赏
举报
回复
[Quote=引用 6 楼 bao110908 的回复:]
我认为下面这种方式更好,同时限制了迭代器的局部变量作用域。
Java codefor(Iterator<E> i = c.iterator(); i.hasNext(); ) {
E temp = i.next();
}
[/Quote]
ZangXT
2008-08-27
打赏
举报
回复
[Quote=引用 2 楼 ZangXT 的回复:]
1的栈操作应该多一些,但不会带来很大的性能损失。
不过2的好处是让temp的作用域限制在循环之内,如果循环后用不到temp了,我会选择2这样的写法。
[/Quote]
晕,正好写反了,丢人了.一般都使用1.
hunterzhang0812
2008-08-27
打赏
举报
回复
给你们再做个测试,看看会得到什么结果
List l = new ArrayList();
POJO p;
for (int i=0; i<10; i++) {
p = new POJO;
l.add(p);
}
for (int i=0; i<10; i++) {
POJO p = new POJO;
l.add(p);
}
看看得到的这两个LIST内容有什么区别没有...
火龙果被占用了
2008-08-27
打赏
举报
回复
当然有差别了,写在里面在执行完成后,能加速对象的垃圾回收,
而写在外面由于局部变量作用范围关系,得在完全退出这个方法
时才会被回收掉。
如果代码很短的话基本上是没区别的,但是如何代码比较长,而
且计算比较复杂的话,我认为应该选用 2,毕竟写代码的原则应
该把局部变量的作用范围限制在尽可能小的范围内。
guoxyj
2008-08-27
打赏
举报
回复
差不多
liang8305
2008-08-27
打赏
举报
回复
完全没有必要抠到这么细
不过我喜欢1,因为temp每次都是新的
加载更多回复(12)
MySQL select * 和把所有的字段都列出来,哪个
效率
更高
?
MySQL select * 和把所有的字段都列出来,哪个
效率
更高
? 关注者 29 被浏览 7486 关注问题
写
回答 添加评论 分享 邀请回答 举报
for和foreach那个
效率
更高
?原因是什么?
写
这篇文章的原因主要是在开发过程中突然有以下几个疑问,特抽出时间深度探究一下,以加深自身对php的理解。1、作为一名phper,for和foreach循环遍历几乎每天都在使用,那么这两种遍历方式哪一种
效率
更高
呢? 2、
效率
高的原因是什么呢? 3、原理分别是什么呢? 1234首先要解决第一个问题,我们可以通过一个简单的测试看一下测试结果,测试
代码
如下:for循环遍历方法:public functio...
【C语言】i++和++i的区别是什么?哪个
效率
高?为什么?
写
这篇文章主要的目的就是想把看到的一些好的C语言习题摘录下来。 执行
效率
理论上,i++的执行
效率
比++i的执行
效率
要高。 ++i不用生成临时变量,而i++要生成临时变量。 这个会因编译器有所区别,有的编译器会对这个流程进行优化。 例如直接汇编相应的
代码
,结果如下: 可以看到它们的执行
效率
是差不多的。 执行逻辑 i++表示先赋值后加1;i++实现的是,运算结束之后进行自加运算,换句话说这一句跑到分号之后才会有自加效果。 ++i表示先加1再赋值;++i正好相反,是在这一句的一开始就进行.
【ChatGLM vs ChatGPT】怎样实现机器人自动
写
代码
?不少于3000字。
4. 开发机器人的算法和程序。知识图谱技术是机器人自动
写
代码
的新兴技术,它能够将程序员的知识和经验转化为机器可理解的知识图谱,从而实现
代码
的自动化生成。机器学习技术是机器人自动
写
代码
的核心技术,它能够根据已有的数据和规则,学习到
代码
的结构、语法和语义,从而自动生成
代码
。
代码
优化技术是机器人自动
写
代码
的重要技术,它能够根据已有的
代码
,对
代码
进行优化和重构,从而提高
代码
的执行
效率
和质量。程序分析技术是机器人自动
写
代码
的关键技术之一,它能够分析已有的
代码
,识别出
代码
的结构、语法和语义,并生成新的
代码
。
for 和 filter 的
效率
哪个
更高
?
测试
代码
假使我们现在需要对一个数组进行过滤,过滤掉其中为0的部分,用作比较的for循环和filter的
代码
如下: var result = Array(500).fill(0) var result1 = [...result] console.time('for循环') var a = [] for(var i=0; i<result.length; i++){ if(result[i] === 1){ a.push(result[i]) } } console.timeEnd('for
Java SE
62,627
社区成员
307,258
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章