ConcurrentModificationException和下标(游标)异位

来源:互联网 发布:90后网络女歌手有哪些 编辑:程序博客网 时间:2024/05/29 02:47
public class Test  {        private static List<String> list = new ArrayList<String>();      public static void init(int num)  {          for (int i = 0; i < num; i++)  {              list.add(i + "");          }      }      public static void main(String[] args)    {          int num = 5;          init(num);                 for (String string : list)  {  //迭代一样修改异常。正常循环不会并发修改异常            if (string.equals(num - 1 + "")) //num-2时引发游标异位              {                  System.out.println("执行remove操作");                 list.remove(string);             } else  {                  System.out.println(string);              }          }      }  }  

输出
0
1
2
3
执行remove操作
Exception in thread “main” java.util.ConcurrentModificationException

修改为

    public static void main(String[] args)    {          int num = 5;          init(num);                 List<String> delList = new ArrayList<String>();//添加临时list集合        for (String string : list)  {  //            if (string.equals(num - 1 + ""))               if (string.equals(num - 2 + ""))              {                  System.out.println("执行remove操作"); //不能这样一个一个移除啦                list.remove(string);                delList.add(string);              } else  {                  System.out.println(string);              }          }          list.removeAll(delList);// 统一移除    }  }  
原创粉丝点击