黑马程序员技术交流社区
标题:
foreach问题
[打印本页]
作者:
封号了...
时间:
2013-8-16 17:00
标题:
foreach问题
基础增强部分张老师给我们讲了JDK1.5新特性,for增强foreach,
我们知道foreach运算比for要快不少,甚至有时候比c++的都要快,
不足之处就是只能从左往右单向遍历,并且不能多层迭代。
当然还有个最大的不足就是只能查询不能改变原值。
下面有个例子报了个想不同的错误:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
for (String string : list) {// java.util.ConcurrentModificationException??------>我下面try、catch了为嘛这里还给我报错呢,下面的删掉就不会出错了!
if (string.equals("2")) {
try {
list.remove(string);
} catch (Exception e) {
e.printStackTrace();
System.out.println("出错了");
}
}
}
System.out.println(list);
}
复制代码
为啥呢
作者:
funneies
时间:
2013-8-16 19:36
List集合在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生并发访问异常(ConcurrentModificationException异常)。
所以,在迭代时,只能用迭代器的方法操作元素,可是Iterator的方法是有限的,只能对元素进行判断,取出,删除操作。
如果想要其他的操作如:添加,修改等,就需要使用其 子接口ListIterator,该接口只能通过List集合的ListIterator接口获取
。
public class ListTest {
public static void main(String []args){
List al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
al.add("java04");
ListIterator it = al.listIterator();
sop(al);
while(it.hasNext()){//正向遍历列表
Object obj = it.next();
if(obj.equals("java02")){
it.add("java08");
}
}
sop(al);
sop(it.hasPrevious());
while(it.hasPrevious()){//反向遍历列表
Object obj = it.previous();
if(obj.equals("java02")){
it.add("java08");
}
}
sop(al);
/*
//在迭代过程中,准备添加或者删除元素
Iterator it = al.iterator();
sop(al);
while(it.hasNext()){
Object obj = it.next();
if(obj.equals("java02")){//不能同时用迭代器和集合操作方法操作集合。
// al.add("java03"); //并发访问异常。ConcurrentModificationException
it.remove();
}
sop(obj);
}
sop("al:"+al);
*/
}
public static void sop(Object obj){
System.out.println(obj);
}
}
复制代码
作者:
封号了...
时间:
2013-8-16 19:41
刚看了一下毕老师的视频,这个异常是并发修改异常,
我测试了一下是foreach跟list.remove(string);
一起调用出的错,改成for就没问题了!
难道foreach跟iterator的实现原理一样么?
都会跟集合自己的方法出现并发修改异常!!
楼下的来回答下
作者:
神之梦
时间:
2013-8-16 22:09
封号了... 发表于 2013-8-16 19:41
刚看了一下毕老师的视频,这个异常是并发修改异常,
我测试了一下是foreach跟list.remove(string);
一起调 ...
高级for跟迭代是一样的效果
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2