import java.util;
class Driver{
public static void main(String[] args) {
ArrayList<String> lstStr = new ArrayList<String>();
lsstStr.add("A");
lsstStr.add("B");
lsstStr.add("C");
for(Iterator<String> it = lstStr.Iterator(); it.hasNext();)
{
str = it.next();
if(str.equals("B")){lstStr.remove(str);}
}
for(Iterator<String> it = lstStr.Iterator(); it.hasNext();)
{
System.out.println(it.next());
}
}
}
这并没有从列表中删除“B”。为什么第二次循环时Str不等于“B”。为什么?
您无法从正在迭代的集合中删除项目except using Iterator.remove http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html#remove%28%29- 你会得到一个ConcurrentModificationException。所以你的循环会是这样的:
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String value = iterator.next();
if (value.equals("B")) {
iterator.remove();
}
}
当然,你应该使用removeAll to just删除具有特定值的所有项目 - 但如果您需要基于简单相等以外的某些条件进行删除(例如“删除长度大于 5 的所有值”),则可以使用上述方法。另一种选择是收集所有要在新集合中删除的值,然后调用removeAll然后。