Java 中对list 的编列,用List.iterator() 还是用for(int i=0;i<size();i++)

Java中对list的编列,用List.iterator()还是用for(inti=0;i<size();i++).请大家对这两种进行比较。我想问一下Five00。为什么... Java 中对list 的编列,用List.iterator() 还是用for(int i=0;i<size();i++).
请大家对这两种进行比较。
我想问一下Five00。为什么我下面的例子测出来iterator比for 慢呢。
public class TestIterator {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List accessList = new ArrayList();
for(int i=0;i<100000;i++){
accessList.add(String.valueOf(i));
}
long start = System.currentTimeMillis();
if (accessList != null && accessList.size() > 0) {
for(Iterator it = accessList.iterator(); it.hasNext();){
String a = (String)it.next();
a+="111";
}
}
System.out.println("Iterator use:"+(System.currentTimeMillis() - start));

long end = System.currentTimeMillis();
if (accessList != null && accessList.size() > 0) {
for(int i=0;i<accessList.size();i++){
String a = (String) accessList.get(i);
a+="111";

}
}
//end = System.currentTimeMillis();
System.out.println("List use:"+(System.currentTimeMillis() - end));
}

}
展开
 我来答
百度网友fa6f888
2007-10-16 · TA获得超过1056个赞
知道小有建树答主
回答量:519
采纳率:0%
帮助的人:516万
展开全部
List的遍历方式有两种,第一种是采用for(int i = 0;i<list.size();i++),第二种采用list.iterator()。当List为ArrayList时两种方式遍历差别不大,第二种稍快。当List使用LinkedList时,用第一种速度非常慢,而采用第二种和ArrayList的遍历速度相当。
所以对于List建议采用iterator的方式进行遍历

补充:你用的是ArrayList,用LinkedList就是Iterator快,因为ArrayList随机的,而LinkedList是索引形式的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
时间之箭
2007-10-15 · TA获得超过694个赞
知道小有建树答主
回答量:442
采纳率:0%
帮助的人:131万
展开全部
ArrayList查快
LinkedList增删快
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友70ae8e86ac
2007-10-16 · TA获得超过1304个赞
知道小有建树答主
回答量:815
采纳率:0%
帮助的人:1098万
展开全部
其实都差不多,没有什么区别,不过还有一种更简洁的遍历方式:

List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");

for(String str:list){
System.out.println(str);
}
是不是简洁多了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Five00
2007-10-16 · TA获得超过206个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:195万
展开全部
回复:
我们除去机器本身的性能问题来说,正常使用List的情况并不是初始化一个List,更多的时候是回传一个List的实例,一会给你举个例子。
现在先看ArrayList类,ArrayList本身是个顺序表,这个与一个数组的概念差不多,如果按照上面程序运行的效果,在我机器上的速度是差不多的,差值在-1~1,如果非要解释为什么ArrayList的枚举器为什么慢,也就慢在转换为Iterator的过程中;
实际上,枚举器的功能更体现在一些有数据结构的List中,比如链表LinkedList,在C里,链表就是直接指向内存地址,Java里,只不过封装一下,使之更加安全,这时候,数据结构就不是顺序表了,而是一个链表,如果这时候来看,枚举器肯定比for效率高,这时候我们来看一下前面说的,大多数时候是程序回传的一个List接口实例,而这个List接口实例就是LinkedList;
比如:List list = anMethod();anMethod方法指定返回类型为一个List型,这个List是个接口,返回的必然是实现List接口的对象,这时候返回的就是Linked实例,所以,List一般并不是自己去实例化,而是通过调用对象方法返回类型来获取,这时候用枚举器就会很有效率。

希望我说明白了~如果有地方不对或者需要探讨,请留言~

用枚举器itertor,这样做的原因是:
枚举器是Java在后台自动排序好,比纯粹的for循环要快,因为如果用 for循环,也需要将List中的对象依次取出,这样对内存的调用是随机的,不如Iterator。

而且,用枚举器也可以进行循环,写法为:
for(Iterator it = list.iterator; it.hasNext();){

Obeject obj = (Object)it.next();
//obj的操作
}

希望能够对你有所帮助。如有问题请留言~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式