这两种方法,那种效率更高呢?
说明:已发一类似贴,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特别庞大的时候,我写的那种方法就越明显!!!
[解决办法]
List <User> userList = getUserList(); for (User user : userList) { System.out.println(user.getUserid); }
[解决办法]
List <User> userList = getUserList(); for (User user : userList) { System.out.println(user.getUserid); }
[解决办法]
说句有点不负责任的话,现在的硬件设施对这点效率损耗几乎可以忽略不计,所以没必要考虑,呵呵。
[解决办法]
public class EffectionTest { public static void main(String[] args) { List<User> users = new ArrayList<User>(); int size = 10000000; for(int i = 0; i < size; ++ i) { User user = new User(); user.id = i; users.add(user); } long beginTime = System.nanoTime(); /*for(User user : users) { System.out.println(user.getId()); }*/ for(int i = 0; i < users.size(); ++ i) { User user = users.get(i); System.out.println(user.getId()); } long endTime = System.nanoTime(); System.out.println("The result is : " + (endTime - beginTime)); }}class User { int id; public int getId() { return this.id; }}
[解决办法]
我觉得用第2种……
因为第1种中如果太多数据,那么事先得到长度就慢了。
[解决办法]
确实是第二种效率高,第一种在编译时其实是用了Iterator的遍历,Iterator是需要考虑同步的。
[解决办法]
我觉得第一种效率低了许多,
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);
}
用这个可行性比较好,提高了很多
http://lhc303.com留个脚印
[解决办法]
private static void test3(){ Date date=null; List<test> tests=new ArrayList<test>(); for(int i=0;i<1000000;i++){ tests.add(new test()); } date=new Date(); System.out.println(date.getTime()); for(test t:tests){ } date=new Date(); System.out.println(date.getTime()); for(int i=0;i<tests.size();i++){ } date=new Date(); System.out.println(date.getTime()); }/*执行结果:124399788218712439978822651243997882281*/