日期:2014-05-20  浏览次数:20781 次

这两种方法,那种效率更高呢?
说明:已发一类似贴,http://topic.csdn.net/u/20090529/17/69e63b93-a9db-4612-961b-c9c57c0ddfb4.html?seed=358121370,为能有更多人参与,再发一个标题好点的吧.
方法1: 
List <User> userList = getUserList(); 
for (User user : userList) 

  System.out.println(user.getUserid); 


方法2: 
List userList = (ArrayList)getUserList(); 
for (int i=0;i < userList.length; i++) 

  User user = (User)userList.get(i); 
  System.out.println(user.getUserid); 


请问以上那种方法效率更高呢?或者更好呢? 
注:之前我都是用后一种方法,对第一种总觉得不美观,没用它,后来我看了不少其它人代码,感觉很多人都喜欢用第一种,而自己也 
有点脱离大众的感觉啊,心里怪怪的,想改过来,但工作量要大,不改呢,要总觉得脱离主流,我测试过,感觉两者效率差不多(也许我数据 
量比较小吧,没看出来),要有点不想改了,可是用第2种编译器老是有警告提示,又很不爽,各位大侠对这两种方法谈谈看法吧,最好要有说服力的理由,谢了.


------解决方案--------------------
兄弟,其实想测试一段程序的运行效率非常简单,
在程序运行上一行加上:
System.currentTimeMillis() 
和程序运行后再加同样的
System.currentTimeMillis() 
这样可以算出程序是否最优.
当然最好是循环一下,不然差别太小了.

非常的明显,你的方法2 效率绝对是最低,因为每次循环完一次,都要去求这个List的大小,这是需要耗时间的!

这个是最好的:
List userList = (ArrayList)getUserList(); 
for (int i=0, k = userList.length;i < k; i++) 

User user = (User)userList.get(i); 
System.out.println(user.getUserid); 


------解决方案--------------------
而且特别是List特别庞大的时候,我写的那种方法就越明显!!!
------解决方案--------------------
探讨
兄弟,其实想测试一段程序的运行效率非常简单,
在程序运行上一行加上:
System.currentTimeMillis()
和程序运行后再加同样的
System.currentTimeMillis()
这样可以算出程序是否最优.
当然最好是循环一下,不然差别太小了.

非常的明显,你的方法2 效率绝对是最低,因为每次循环完一次,都要去求这个List的大小,这是需要耗时间的!

这个是最好的:
List userList = (ArrayList)getUserList();
for (int i=0, k = userList.le…

------解决方案--------------------

JDK支持范形就用第一种吧
------解决方案--------------------
学习了,谢谢!
------解决方案--------------------
JDK1.5的新特性foreach循环
sun推出来的肯定比以前的循环好!
------解决方案--------------------
学习了
------解决方案--------------------
Java code
List <User> userList = getUserList(); 
for (User user : userList) 
{ 
    System.out.println(user.getUserid); 
}

------解决方案--------------------
引用楼主 xzytest 的帖子:
方法1:
List <User> userList = getUserList();
for (User user : userList)
{
System.out.println(user.getUserid);
}

方法2:
List userList = (ArrayList)getUserList();
//这里不是length,是getSize()方法
for (int i=0;i < userList.getSize(); i++)
{
User user = (User)userList.get(i);
System.out.println(user.getUserid);
}

------解决方案--------------------
探讨
而且在第二种形式里他还用到了同步(直接没看到),效率是要低些的。


------解决方案--------------------
标记了 RandomAccess 接口的。第二种比第一种快。
没标记的,第一种比第二种快。
------解决方案--------------------
探讨
引用楼主 xzytest 的帖子:
方法1:
List <User> userList = getUserList();
for (User user : userList)
{
System.out.println(user.getUserid);