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

关于遍历ArrayList的问题
以下2种方法有什么不同,个人感觉好象没什么不同..除了用跌代器看上去比较帅以外....:

1. ArrayList   arrayList=new   ArrayList();
Iterator   it=arrayList.iterator();
while(it.hasNext()){
it.next();
// .........
}

2. for(int   i=0;i <arrayList.size();i++){
arrayList.get(i);
// .........
}

------解决方案--------------------
Iterator的方法好一点,因为第二个方法每次都会调用arrayList.size()去算一下,效率上来说应该还是第一个好

------解决方案--------------------
当然是效率问题了.
------解决方案--------------------
用Iterator不必关心容器到底是ArrayList还是LinkList或者是其他的集合类!
for(int i=0;i <arrayList.size();i++) 里面就必须要有具体的集合类型如arrayList
------解决方案--------------------
迭代器有个问题~~
如果你是遍历arraylist删除特定的Object 就有问题了
------解决方案--------------------
public interface List <E> extends Collection <E>
public interface Iterator <E> 对集合进行迭代的迭代器

------解决方案--------------------
学习。。。。
------解决方案--------------------
仔细看看Java API,吧,ArrayList.get(i)直接从数组中得到指定位置的对象,而这个对象及位置在list.add()的时候已经放好了。当然这个快了。
------解决方案--------------------
这儿只不过是为了遍历不同的容器提供了一个统一的接口。

没有效率上的考量。
------解决方案--------------------
可以参考下ArrayList 下继承的Iterator下的hasNext()代码。内部实现也是对Object的循环。接口嘛,就是定义一个规则,集合类继承它的方法,覆盖掉重写。这样考虑了他的扩展性,比如你突然要把LIST该为HashMap/
------解决方案--------------------
对于容器类的编厉,最好使用跌代器。主要是效率的问题。
------解决方案--------------------
mark~~~~~
------解决方案--------------------
对于ArrayList来说,Iterator的效率要比for(int i的低,但是它的好处是允许你中间随意的删除it.remove()而不用像for(int i中这样自己要考虑索引的变化


但是对于LinkedList来说,Iterator的效率要远远高于for(int i,因为for(int i这样的方法会导致在get(100)时,LinkedList会移动99次指针才能找到正确的对象
------解决方案--------------------
在数据量小的时候,没什么区别
------解决方案--------------------
1.ArrayList arrayList=new ArrayList();
Iterator it=arrayList.iterator();
while(it.hasNext()){
it.next();
//.........
}

2.for(int i=0;i <arrayList.size();i++){
arrayList.get(i);
//.........
}
我有更帅的方法,比以是的都帅,在JDK 1.5中引入了for--each 循环.
import java.util.*;
public void ForEachCollection
{
public void main(String[] args)
{
ArrayList arrayList=new ArrayList();
for(Object O:arrayList)
{

System.out.println(O);

}

}
}
该循环按顺序访问arrayList中的每一个Object 型元素O,

------解决方案--------------------
public void bianli(Collection c){
Iterator it=c.iterator();
while(it.hasnext()){
Object o=it.next();
//do something
}
}
------解决方案--------------------

用跌代器看上去比较帅
------解决方案--------------------
一个Enumeration或者你说的Iterator都是一种设计模式
让你不用关心集合类型的去访问集合元素