无法从ArrayList中删除[英] Not able to remove from an ArrayList

问题描述

 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".为什么?

推荐答案

你不能使用 Iterator.remove - 你会得到一个 ConcurrentModificationException.所以你的循环会是这样的:

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

当然,您应该使用 removeAll 来仅删除具有特定值的所有项目 - 但是如果您需要基于某些条件而不是简单的条件进行删除,则可以使用上述方法相等(例如"删除所有长度大于 5 的值".另一种选择是收集所有要删除的值到一个新集合中,然后调用 removeAll.

本文地址:https://www.itbaoku.cn/post/978652.html