关于遍历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都是一种设计模式
让你不用关心集合类型的去访问集合元素
作为你和集合之间的中间对象来负责你对集合的访问,加上范型,我认为很好
至于从效率上讲,我觉得要分应用场合
如果你只关心顺序的访问,我觉得没有太大的差别
如果关心访问的索引,可能for更好
for是赤裸裸的访问引用对象,Enumeration是对数据实现的抽象,设计取胜。
上面是我的看法,谢谢批评指正
[解决办法]
List分为ArrayList和LinkedList,前者是数组的结构,在内存里是顺序存放的,可以随机访问,是索引序列,而LinkedList是双重链表的形式,可以在任何位置进行插入和删除,是有序序列。访问元素的话就是采用迭代器方式或者Set()和get()方法,在少量元素的情况下,两者区别不大,不过对于LinkedList而言,不大适合用get()去访问元素,
楼主你写的:
for(int i=0;i <arrayList.size();i++){
arrayList.get(i);
//.........
}
如果换成LinkedList的话,每次找一个元素时候,都必须从列表头开始遍历,效率也就低了。事实上,楼主这段程序稍微改变下,会更好,如下:
for(int i=0;int m=arrayList.size();i <m;i++){
arrayList.get(i);
//.........
}
这样可以避免每次循环都调用一次size()方法,当然,这样的效率可能你很难察觉出来。
[解决办法]
楼猪弱智
[解决办法]
Array <xxx> xxxList = new Array <xxx> ();
for (xxx x : xxxList) {
//todo...
}