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

循环方法多,咱该优先选哪个
我是Java初学者,这个问题一直困扰着我,请教高人指点
比如说我写几个循环
Java code

List<Var> vars= new ArrayList<Var>();

for (int i = 0; i < vars.size(); i++) {
    Var var = vars.get(i);
         //……
}
/*-----------------------------------------------*/

for (Iterator<Var> it = vars.iterator(); it.hasNext();) {//用迭代器会有内部锁定,效率应给不会高
    Var var = it.next();
         //……
}
/*-----------------------------------------------*/

Iterator<Var> it = vars.iterator();//同上
while(it.hasNext()){
    Var var = it.next();
         //……
}
/*-----------------------------------------------*/

for (Var temp_var : vars) {//这个是foreach迭代,不知道底层是iterator,不是的话拜托各位高手解释
    Var var = temp_var;
         //……
}


我举这几个例子,就这些循环中哪个效率会更高呢?
如果有更高效的循环,也请与大家分享,谢谢。



------解决方案--------------------
优先使用foreach。理由:
1 访问数组与容器等(Iterable)方式统一
2 速度上,并不慢(下面会特别讲效率)
缺点:
没法直接获取循环下标

补充:
1 lz的第3种方式属于坚决需要消灭的方式,最小化变量使用范围。
Java code

Iterator<Var> it = vars.iterator();//同上
while(it.hasNext()){
    Var var = it.next();
         //……
}
Iterator<Var> it2 = vars.iterator();//同上
while(it.hasNext()){
    Var var = it.next();
         //……
}