今天做了简单测试,发现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) |
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
难道是哪用的不对
两个循环代码:
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);
相关热门文章
给主人留下些什么吧!~~
cuichaox2007-12-15 20:56:01
使用LinkedList试试 有以下猜测: (1)for是使用下标(偏移量)定位的. (2)foreach应该是使用类似循环子的机构 (3)对随机访问效率高的ArrayList. 使用下标访问效率本身很高.foreach内部的循环子直接封装下标,自己实现的for比foreach更直接,效率稍高些,但差别不会太大,仍然在一个数量级上。 (4)如果使用插入和删除效率高的LinkedList,for基于下标访问会每次从头查询,效率会很低.foreach循环子使用高效的地址运算,效率会高.其差距将很大,完全不在一个数量级别.如果数组很大,差别可能会几百甚至上千倍.
评论热议