三种迭代能否删除

package com.day15.For;

import java.util.ArrayList;
import java.util.Iterator;

/*普通for循环,可以删除,但是索引要--

迭代器,可以删除,但是必须使用迭代器自身的remove方法,而不是集合的remove方法,否则会出现并发修改异常

增强for循环不能删除,因为增强for循环底层依赖的是迭代器,但是调用删除方法时,必须使用list.remove(),则相当于调用的是集合的删除方法,引起并发修改异常

public class ThreeDelete {

public static void main(String[] args) {
  ArrayList<String> list=new ArrayList<>();
  list.add("a");
  list.add("b");
  list.add("b");
  list.add("c");
  list.add("d");
  //普通for循环删除,索引要--
  /* for(int i=0;i<list.size();i++) {
    if("b".equals(list.get(i))) {
      list.remove(i--);
    }
   }
  System.out.println(list);//[a, c, d]
  */

/*
  Iterator<String> it =list.iterator();
    while(it.hasNext()) {
      if("b".equals(it.next())) {
      //list.remove("b");//不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
      it.remove();
    }
  }
  System.out.println(list);//[a, c, d]
*/
/*  for(Iterator<String> it1=list.iterator();it1.hasNext();) {
    if("b".equals(it1.next())) {
    it1.remove();
    }
  }
  System.out.println(list);//[a, c, d]
*/
    for(String str:list) {
      if("b".equals(str)) {
      list.remove("b");//并发修改异常,因为增强for循环底层依赖的是迭代器
    }
  }
}

}

原文地址:https://www.cnblogs.com/zhujialei123/p/9025873.html