首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

这两种方法,那种效率更高呢

2011-11-27 
这两种方法,那种效率更高呢?说明:已发一类似贴,http://topic.csdn.net/u/20090529/17/69e63b93-a9db-4612-

这两种方法,那种效率更高呢?
说明:已发一类似贴,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);


}

方法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);
}

我可以很明确的告诉你,效率是第二种方法最…


[解决办法]
探讨
引用:
引用楼主 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)…

[解决办法]
按qusic的说法,确实是第2种写法的效率比较高 !
不过可以看看http://topic.csdn.net/u/20080929/13/3b236174-bc1d-4dee-9f54-05e7d49a6a2f.html
以前有人讨论过的帖子
[解决办法]
存取对象map肯定比list效率高,map不适合存取大量对象,而list就适合,
所以可将map和list结合使用!
[解决办法]
不知道大家注意到另一个问题没用?
在jdk5.0中引入了范型的概念,
Java code
List <User> userList = getUserList(); for (User user : userList) {     System.out.println(user.getUserid); }
[解决办法]
说句有点不负责任的话,现在的硬件设施对这点效率损耗几乎可以忽略不计,所以没必要考虑,呵呵。
[解决办法]
Java code
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留个脚印
[解决办法]
Java code
    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*/ 

热点排行