无法从ArrayList中删除 import java.util; 类驱动程序{ 公共静态void main(字符串[]args){ ArrayList lstStr=新的ArrayList(); lsstStr.添加(“A”); lsstStr.添加(“B”); lsstStr.添加(“C”); for(Iterator it=lstStr.Iterator();it.hasNext();) { str=it.next(); 如果(str.equals(“B”){lstStr.remove(str);} } for(Iterator it=lstStr.Iterator();it.hasNext();) { System.out.println(it.next()); } } }
这并不是从列表中删除“B”。为什么循环第二次运行时Str不等于“B”。为什么?试试这个:它将从列表中删除所有出现的“B”,而不包含任何循环无法从ArrayList中删除 import java.util; 类驱动程序{ 公共静态void main(字符串[]args){ ArrayList lstStr=新的ArrayList(); lsstStr.添加(“A”); lsstStr.添加(“B”); lsstStr.添加(“C”); for(Iterator it=lstStr.Iterator();it.hasNext();) { str=it.next(); 如果(str.equals(“B”){lstStr.remove(str);} } for(Iterator it=lstStr.Iterator();it.hasNext();) { System.out.println(it.next()); } } },java,Java,这并不是从列表中删除“B”。为什么循环第二次运行时Str不等于“B”。为什么?试试这个:它将从列表中删除所有出现的“B”,而不包含任何循环 import java.util; class Driver{ public static void main(String[] args) { ArrayList<String> lstStr = new ArrayList<String>(); lsstStr.add("A"); l
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());
}
}
}
您不能从正在迭代的集合中删除项,除非使用-您将得到一个
ConcurrentModificationException
。所以你的循环应该是这样的:
lstStr.removeAll(Collections.singleton("B"));
for(Iterator Iterator=list.Iterator();Iterator.hasNext();){
字符串值=迭代器.next();
如果(值等于(“B”)){
iterator.remove();
}
}
当然,您应该使用
removeAll
仅删除具有特定值的所有项,但如果您需要基于某些条件而不是简单相等(例如“删除长度大于5的所有值”),则可以使用上述方法删除。另一个选项是收集要在新集合中删除的所有值,然后调用removeAll
。使用迭代器的remove
方法。它将从集合中删除元素。您的代码当前不会编译,因此不会显示任何内容。请先给出一个编译的示例。您很清楚rly没有运行您发布的代码,因此我们不知道实际运行的是什么代码。此代码将导致并发修改异常,因为从集合中删除元素后迭代器变得不可用。您没有告诉我们这一点,因此可能您甚至没有尝试过。import java.util.*;class Drive{public static void main(String[]args){ArrayList lstStr=new ArrayList();lstStr.add(“A”);lstStr.add(“R”);lstStr.add(“C”);String str;for(Iterator it=lstStr.Iterator();it.hasNext()){str=it.next();if(str.equals(“R”){lstStr.remove(it);}for(Iterator it=lstStr.Iterator();it.hasNext();){System.out.println(it.next());}}}}@Brometheus:请不要在这样的注释中添加代码-尤其是在没有任何指示的情况下。如果您想更改您的问题(您应该更改),使其编译,如果没有其他内容的话)你应该编辑问题,不要在答案上添加毫无意义的评论,也不要在单独的帖子中提出新问题。
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String value = iterator.next();
if (value.equals("B")) {
iterator.remove();
}
}