嵌套迭代列表,然后是最终删除

Zar*_*Zar 4 java oop iterator loops

我正在尝试通过循环遍历列表(嵌套循环)进行迭代.请考虑以下代码:

ArrayList<Integer> list = new ArrayList<Integer>(); // add some values to it

for(int i : list) { // ConcurrentModificationException

   Iterator iterator = list.iterator();

   while(iterator.hasNext()) {

      int n = iterator.next();

      if(n % i == 0) {
         iterator.remove();
      }

   }

}
Run Code Online (Sandbox Code Playgroud)

上面的示例导致ConcurrentModificationException.当然,移除元素的条件只是一个例子.

我确定我只是遗漏了一些东西; 但是我应该如何构建一个在Java 中实现相同功能而不会抛出异常的循环

P.P*_*.P. 5

显然修改list当你迭代它导致execption.您可以使用另一个列表来维护要删除的元素列表,并在最后删除它们.

ArrayList<Integer> list = new ArrayList<Integer>(); // add some values to it
ArrayList<Integer> del = new ArrayList<Integer>(); // Elements to be deleted

for(int i : list) { // ConcurrentModificationException
   Iterator iterator = list.iterator();
   while(iterator.hasNext()) {    
      int n = iterator.next();
      if(n % i == 0) {
          del.add(n);      
      }
   }
}

list.removeALL(del);
Run Code Online (Sandbox Code Playgroud)