黑马程序员技术交流社区
标题:
java中迭代器的使用
[打印本页]
作者:
王大斌
时间:
2013-4-7 22:36
标题:
java中迭代器的使用
本帖最后由 王大斌 于 2013-4-7 23:32 编辑
在java中,既可以用高级for循环,也可以使用iterator去遍历一个集合,感觉高级for方便啊,请问什么时候用iterator去遍历一个集合
作者:
赵晓东
时间:
2013-4-7 22:43
高级for 只能对集合中的对象进行打印输出等操作,并不能操作集合的内容,如修改对象的值,添加删除元素等等,Iterator具备这样的功能
作者:
ㄨ____陌生
时间:
2013-4-7 22:57
1.增强for循环和iterator遍历的效果是一样的,增强for循环的内部也就是调用iteratoer实现的,但是增强for循环 有些缺点,不能在增强循环里动态的删除集合内容。不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
以下例子证明第一点
① public static void removeEvensVer2(List<Integer> lst)
{
for (Integer x : lst)
if (x % 2 == 0)
lst.remove(x);
System.out.println(lst);
}
② public static void removeEvensVer3(List<Integer> lst)
{
Iterator<Integer> itr = lst.iterator();
while (itr.hasNext())
if (itr.next() % 2 == 0)
itr.remove();
System.out.println(lst);
}
①在运行时抛出异常,②正常
原因分析:因为增强的for循环内部就是调用iterator实现的,在遍历的时候就将list转化为了迭代器,当迭代器被
创建之后,如果从结构上对列表修改除非通过迭代器自身的remove、add方法,其他任何时间任何方式的修改,迭代
器都会抛出ConcurrentModificationException异常。
作者:
王川
时间:
2013-4-7 23:10
当你在遍历一个集合,同时要操作集合,这个操作涉及到集合的大小(比如删除,添加)的时候,就要用iterator。
如果你遍历集合的同时删除集合中的元素,用增强for循环或者一般的for循环方式,不会得到正确结果,甚至还会报错
作者:
黄小贝
时间:
2013-4-7 23:18
增强for循环就是用的iterator~~可以做个小实验~~
QQ截图20130407224523.png
(34.48 KB, 下载次数: 17)
下载附件
2013-4-7 23:17 上传
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Demo01 {
public static void main(String[] args) throws Exception {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
for(Iterator<String> it = list.iterator();it.hasNext();){
System.out.println(it.next());
//list.remove(1);
}
for(String string : list){
System.out.println(string);
//list.remove(1);
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
list.remove(1);
}
}
}
复制代码
作者:
刘林虎
时间:
2013-4-7 23:39
for,while是一样的,形式上的不同
foreach,Iterator也是一样的,形式上的不同
性能肯定是用迭代器的好一些。迭代器能直接访问集合内部元素。而且有的集合没有索引,没法用for来遍历,只有用迭代器。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2