拓展 集合并发修改异常问题

叫号系统

LinkedList<String> queue = new LinkedList<>();
//入队
queue.addLast("1号");
queue.addLast("2号");
queue.addLast("3号");
queue.addLast("4号");
System.out.println(queue);
//出队
System.out.println(queue.removeFirst());
System.out.println(queue.removeFirst());
System.out.println(queue.removeFirst());

==========================================
问题 当我们从集合中找出某个元素并删除的时候可能会出现一种并发修改异常问题
建议使用迭代器解决
ArrayList<String> list = new ArrayList<>();
list.add("黑马");
list.add("java");
list.add("java");
list.add("赵敏");
list.add("赵敏");
list.add("苏苏");

//需求 , 删除全部的Java信息
//a . 迭代器遍历删除
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String st = iterator.next();
if ("java".equals(st)){
iterator.remove(); //使用迭代器删除当前位置元素保证不后移
}
}
System.out.println(list);

// b. 增强for遍历删除(会出现Bug)
for(String st : list){
if ("Java".equals(st)){
//这个不行 , 只能用迭代器删除
}
}

//c. for循环遍历删除
for (int i = 0; i < list.size(); i++) {
String st = list.get(i);
if ("java".equals(st)){
list.remove("java");
i--;
}
}
System.out.println(list);
//倒着删除
for (int i = list.size()-1; i >= 0 ; i--) {
String st = list.get(i);
if ("java".equals(st)){
list.remove("java");

}
}
System.out.println(list);

posted on 2022-03-22 16:35  我要当程序源  阅读(46)  评论(0)    收藏  举报

导航