java用迭代器边遍历边删除的问题
packagecom.leping.www;importjava.util.ArrayList;importjava.util.Iterator;importjava.u...
package com.leping.www;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Remove {
/**
* @param args
*/
public static void main(String[] args) {
List<String> li = new ArrayList<String>();
for (int i = 0; i < 15; i++) {
li.add(String.valueOf(i));
}
// Iterator<String> it = li.iterator();
// while (it.hasNext()) {
// //System.out.println(it.next());
// if (Integer.parseInt((String) it.next()) == 9) {
// //Integer.parseInt((String) it.next())==12
// it.remove();
// }
// if(Integer.parseInt((String) it.next())==12)
// it.remove();
// }
for (Iterator<String> it = li.iterator(); it.hasNext();) {
// String ii = (String) it.next();
// System.out.println(ii);
if ((Integer.parseInt((String) it.next()) == 9)
|| (Integer.parseInt((String) it.next()) == 12)) {
it.remove();
}
}
for (Object o : li) {
System.out.println("o = " + o);
}
}
}
报错为:
Exception in thread "main" java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:350)
at com.leping.www.Remove.main(Remove.java:31)
请帮助为什么,用别的办法来删除已经知道了.
我自己测试了一下,如果用迭代器来做if的判断就出错,但是如果先用迭代器提取出来保存在一个对象里面,用这个对象来做判断,就没有问题:
for (Iterator<String> it = li.iterator(); it.hasNext();) {
String ii = (String) it.next();
System.out.println(ii);
if ((Integer.parseInt(ii) == 9)
|| (Integer.parseInt(ii) == 12)) {
it.remove();
}
} 展开
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Remove {
/**
* @param args
*/
public static void main(String[] args) {
List<String> li = new ArrayList<String>();
for (int i = 0; i < 15; i++) {
li.add(String.valueOf(i));
}
// Iterator<String> it = li.iterator();
// while (it.hasNext()) {
// //System.out.println(it.next());
// if (Integer.parseInt((String) it.next()) == 9) {
// //Integer.parseInt((String) it.next())==12
// it.remove();
// }
// if(Integer.parseInt((String) it.next())==12)
// it.remove();
// }
for (Iterator<String> it = li.iterator(); it.hasNext();) {
// String ii = (String) it.next();
// System.out.println(ii);
if ((Integer.parseInt((String) it.next()) == 9)
|| (Integer.parseInt((String) it.next()) == 12)) {
it.remove();
}
}
for (Object o : li) {
System.out.println("o = " + o);
}
}
}
报错为:
Exception in thread "main" java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:350)
at com.leping.www.Remove.main(Remove.java:31)
请帮助为什么,用别的办法来删除已经知道了.
我自己测试了一下,如果用迭代器来做if的判断就出错,但是如果先用迭代器提取出来保存在一个对象里面,用这个对象来做判断,就没有问题:
for (Iterator<String> it = li.iterator(); it.hasNext();) {
String ii = (String) it.next();
System.out.println(ii);
if ((Integer.parseInt(ii) == 9)
|| (Integer.parseInt(ii) == 12)) {
it.remove();
}
} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询