无法从ArrayList中删除

import java.util; class Driver{ public static void main(String[] args) { ArrayList lstStr = new ArrayList(); lsstStr.add("A"); lsstStr.add("B"); lsstStr.add("C"); for(Iterator it = lstStr.Iterator(); it.hasNext();) { str = it.next(); if(str.equals("B")){lstStr.remove(str);} } for(Iterator it = lstStr.Iterator(); it.hasNext();) { System.out.println(it.next()); } } } 

这不是从列表中删除“B”。 当循环第二次运行时,为什么Str不等于“B”。为什么?

除了使用Iterator.remove 之外,您无法从正在迭代的集合中删除项目 – 您将获得ConcurrentModificationException 。 所以你的循环将是这样的:

 for (Iterator iterator = list.iterator(); iterator.hasNext();) { String value = iterator.next(); if (value.equals("B")) { iterator.remove(); } } 

当然,您应该使用removeAll来删除具有特定值的所有项目 – 但如果您需要根据除简单相等之外的某些条件进行删除,则使用上述方法(例如,“删除长度大于5“。另一种选择是收集要在新集合中删除的所有值,然后再调用removeAll

试试这个:它将从你的List中删除所有出现的“B”而没有任何循环。

 lstStr.removeAll(Collections.singleton("B")); 

使用迭代器的remove方法。 它将从集合中删除元素。