A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© waylent 中级黑马   /  2015-4-5 22:40  /  1030 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第一段代码:
  1.                 Collection col1=new ArrayList();
  2.                 for (int i = 0; i < 10000; i++) {
  3.                         col1.add("测试数据"+i);
  4.                 }
  5.                 long startTime=System.currentTimeMillis();
  6.                 Iterator it=col1.iterator();
  7.                 while(it.hasNext()){
  8.                         System.out.println(it.next());
  9.                 }
  10.                 System.out.println(System.currentTimeMillis()-startTime);
复制代码

第二段代码:
  1.                 Collection col1=new ArrayList();
  2.                 for (int i = 0; i < 10000; i++) {
  3.                         col1.add("测试数据"+i);
  4.                 }
  5.                 long startTime=System.currentTimeMillis();
  6.                 for (Iterator it=col1.iterator();it.hasNext();) {
  7.                         System.out.println(it.next());
  8.                 }
  9.                 System.out.println(System.currentTimeMillis()-startTime);
复制代码

为什么第二段代码比第一段代码跑的快?

9 个回复

倒序浏览
目测两段代码没有什么性能差异。楼主测过几次,差距多大,做统计分析了吗?快慢不是那么简单就能得出结论的。
回复 使用道具 举报
看不懂,,还得努力学习
回复 使用道具 举报
fantacyleo 发表于 2015-4-5 22:46
目测两段代码没有什么性能差异。楼主测过几次,差距多大,做统计分析了吗?快慢不是那么简单就能得出结论的 ...

优化测试代码如下:
  1. public static void main(String[] args) {
  2.                 demo3();
  3.                 demo4();
  4.         }
  5.         public static void demo3(){
  6.                 Collection col1=new ArrayList();
  7.         for (int i = 0; i < 1000000; i++) {
  8.                 col1.add("测试数据"+i);
  9.         }
  10.         long startTime=System.currentTimeMillis();
  11.         Iterator it=col1.iterator();
  12.         while(it.hasNext()){
  13.                 System.out.print("");
  14.                 it.next();
  15.         }
  16.         System.out.println(System.currentTimeMillis()-startTime);
  17.         }
  18.         public static void demo4(){
  19.                 Collection col1=new ArrayList();
  20.         for (int i = 0; i < 1000000; i++) {
  21.                 col1.add("测试数据"+i);
  22.         }
  23.         long startTime=System.currentTimeMillis();
  24.         for (Iterator it=col1.iterator();it.hasNext();) {
  25.                    System.out.print("");
  26.                 it.next();
  27.         }
  28.         System.out.println(System.currentTimeMillis()-startTime);
  29.         }
复制代码
运行结果:
12 3 4 5 6 7 8 9 10
demo3 125 111 111 110 117 110 126 110 126 111
demo4 94 95 94 93 101 94 115 100 112 94



回复 使用道具 举报
fantacyleo 发表于 2015-4-5 22:46
目测两段代码没有什么性能差异。楼主测过几次,差距多大,做统计分析了吗?快慢不是那么简单就能得出结论的 ...

之所以好奇是因为毕向东基础视频里讲了这两种方式,毕老师说第二种快,就想验证一下,果然如此,但是解释不了
回复 使用道具 举报
waylent 发表于 2015-4-5 23:29
之所以好奇是因为毕向东基础视频里讲了这两种方式,毕老师说第二种快,就想验证一下,果然如此,但是解释 ...

我把demo4()和demo3()对调,结果就变成了demo3快。
回复 使用道具 举报
个人认为没有什么差别,只是for里面的变量时存在栈内存里面相对而言要节约空间而已!
回复 使用道具 举报
l落落落叶 来自手机 中级黑马 2015-4-6 08:48:28
8#
还好还好。。。。
回复 使用道具 举报
Dark县令 发表于 2015-4-6 00:37
个人认为没有什么差别,只是for里面的变量时存在栈内存里面相对而言要节约空间而已! ...

Dark县令所言极是
回复 使用道具 举报
完全看不懂啊     。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马