第十二节:第七部分:集合框架:Collection集合的使用总结、集合的并发修改异常问题
Collection集合的使用总结
集合的并发修改异常
代码:
package com.itheima.day21_Collection_exception;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;//目标:理解集合的并发修改异常问题,并解决
public class CollectionTest {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("王麻子");list.add("小李子");list.add("李爱花");list.add("张全蛋");list.add("晓李");list.add("李玉刚");System.out.println(list);//[王麻子, 小李子, 李爱花, 张全蛋, 晓李, 李玉刚]//需求:找出集合中全部带“李”的名字,并从集合中删除。// 使用for循环遍历集合并删除集合中带李字的名字//[王麻子, 小李子, 李爱花, 张全蛋, 晓李, 李玉刚]//[王麻子, 李爱花, 张全蛋, 李玉刚]
// for (int i = 0; i < list.size(); i++) {
// String name = list.get(i);
// if (name.contains("李")){
// list.remove(name);
// }
// }
// System.out.println(list);//[王麻子, 李爱花, 张全蛋, 李玉刚]System.out.println("====================================");// 怎么解决呢?// 使用for循环遍历集合并删除集合中带李字的名字//[王麻子, 小李子, 李爱花, 张全蛋, 晓李, 李玉刚]//[王麻子, 张全蛋]
// for (int i = 0; i < list.size(); i++) {
// String name = list.get(i);
// if (name.contains("李")){
// list.remove(name);
// i--;
// }
// }// 倒着去删除也是可以的。
// System.out.println(list);//需求:找出集合中全部带“李”的名字,并从集合中删除。// 注意不能使用增强for循环遍历集合并删除数据,没有办法解决bug,因为它是迭代器简化写法,没办法获得迭代器,因此无法使用迭代器的remove方法Iterator<String> it = list.iterator();while (it.hasNext()) {String name = it.next();if (name.contains("李")){//list.remove(name);//并发修改异常的错误。it.remove();// 删除迭代器当前遍历到的数据,每删除一个数据后,相当于也在底层做了i--}}System.out.println(list);}
}