相关疑难解决方法(0)

在预期时不抛出java.util.ConcurrentModificationException

以下代码按预期抛出java.util.ConcurrentModificationException:

   public void test(){
      ArrayList<String> myList = new ArrayList<String>();

      myList.add("String 1");
      myList.add("String 2");
      myList.add("String 3");
      myList.add("String 4");
      myList.add("String 5");

      for(String s : myList){
         if (s.equals("String 2")){
            myList.remove(s);
         }
      }
   }
Run Code Online (Sandbox Code Playgroud)

但是,下面的代码并没有抛出异常,而我希望它被抛出:

   public void test(){
      ArrayList<String> myList = new ArrayList<String>();

      myList.add("String 1");
      myList.add("String 2");
      myList.add("String 3");

      for(String s : myList){
         if (s.equals("String 2")){
            myList.remove(s);
         }
      }
   }
Run Code Online (Sandbox Code Playgroud)

区别在于第一个列表包含5个项目,而第二个列表包含3.使用的JVM是:

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
Run Code Online (Sandbox Code Playgroud)

问题:为什么第二段代码 …

java exception

15
推荐指数
2
解决办法
1897
查看次数

它不会抛出异常ConcurrentModificationException

我有下面的代码,我希望它抛出一个ConcurrentModificationException,但它运行成功.为什么会这样?

public void fun(){
    List <Integer>lis = new ArrayList<Integer>();
    lis.add(1);
    lis.add(2);

    for(Integer st:lis){
        lis.remove(1);
        System.out.println(lis.size());
    }
}

public static void main(String[] args) {
    test t = new test();
    t.fun();
}
Run Code Online (Sandbox Code Playgroud)

java iterator

10
推荐指数
1
解决办法
954
查看次数

标签 统计

java ×2

exception ×1

iterator ×1