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));
}
} 展开
请大家对这两种进行比较。
我想问一下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));
}
} 展开
4个回答
展开全部
List的遍历方式有两种,第一种是采用for(int i = 0;i<list.size();i++),第二种采用list.iterator()。当List为ArrayList时两种方式遍历差别不大,第二种稍快。当List使用LinkedList时,用第一种速度非常慢,而采用第二种和ArrayList的遍历速度相当。
所以对于List建议采用iterator的方式进行遍历
补充:你用的是ArrayList,用LinkedList就是Iterator快,因为ArrayList随机的,而LinkedList是索引形式的.
所以对于List建议采用iterator的方式进行遍历
补充:你用的是ArrayList,用LinkedList就是Iterator快,因为ArrayList随机的,而LinkedList是索引形式的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ArrayList查快
LinkedList增删快
LinkedList增删快
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实都差不多,没有什么区别,不过还有一种更简洁的遍历方式:
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
for(String str:list){
System.out.println(str);
}
是不是简洁多了?
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
for(String str:list){
System.out.println(str);
}
是不是简洁多了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回复:
我们除去机器本身的性能问题来说,正常使用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的操作
}
希望能够对你有所帮助。如有问题请留言~
我们除去机器本身的性能问题来说,正常使用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的操作
}
希望能够对你有所帮助。如有问题请留言~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询