集合ArrayList遍历修改问题
来源:互联网 发布:淘宝官网客户端 编辑:程序博客网 时间:2024/06/07 00:27
关于集合ArrayList的遍历修改问题:
/*** 一个ArrayList对象aList中存有若干个字符串元素,* 现欲遍历该ArrayList对象,删除其中所有值为"abc"的字符串元素*/import java.util.*;public class Test3 { public static void main(String[] args) { ArrayList<String> aList=new ArrayList<String>(); aList.add("bbc"); aList.add("abc"); aList.add("ysc"); aList.add("abc"); aList.add("xyza"); aList.add("abc"); System.out.println("移除前:"+aList); Iterator<String> it=aList.iterator(); while(it.hasNext()){ if("abc".equals(it.next())) it.remove(); } System.out.println("移除后:"+aList); } }void remove()从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的 collection,则迭代器的行为是不确定的。
1.迭代器是作为当前集合的内部类实现的,当迭代器创建的时候保持了当前集合的引用;
2.集合内部维护一个字段叫modiCount,用来记录集合被修改的次数,比如add,remove,set等都会使该字段递增;
3.迭代器内部也维护着当前集合的修改次数的字段,迭代器创建时该字段初始化为集合的modiCount值
4.当每一次迭代时,迭代器会比较迭代器维护的字段和modiCount的值是否相等,如果不相等就抛ConcurrentModifiedException异常;
5.当然,如果用迭代器调用remove方法,那么集合和迭代器维护的修改字数都会递增,以保持两个状态的一致。
这就是为什么你只可以用迭代器来删除,而不能用其他方式来修改集合。
0 0
- 集合ArrayList遍历修改问题
- java 集合(arraylist set map)遍历问题
- 集合 List ArrayList 问题
- ArrayList 集合遍历 删除 筛选重复数据
- ArrayList的遍历删除问题
- ArrayList集合数据排序问题
- 集合部分:ArrayList集合添加元素,并遍历元素
- 黑马程序员---ArrayList集合嵌套HashMap集合并遍历
- 集合框架-集合的嵌套遍历(HashMap嵌套ArrayList)
- 集合框架-集合的嵌套遍历(ArrayList嵌套HashMap)
- 遍历ArrayList容易碰到的问题!
- Java集合01----ArrayList的遍历方式及应用
- 在ArrayList集合中的四种遍历方法
- C#控制台基础 用for循环遍历arraylist集合
- Day16_01 集合框架(ArrayList存储字符串并遍历)
- 集合框架-ArrayList存储字符串、自定义对象并遍历泛型版
- Java中ArrayList集合嵌套存储和遍历
- 四种集合的遍历(HashMap、Queue、Stack、ArrayList)
- 创建窗口,使其能移动的代码
- CodeForces-732C-Sanatorium(模拟)
- 高性能的关键:Spring MVC的异步模式
- Android webview 加载html5 Video的视频,有时候出不来,该怎么办呢?
- BM318Maximum Product of Word Lengths
- 集合ArrayList遍历修改问题
- 初雪
- Maven 中Java代码不编译
- 设计模式(三)之行为型模式
- 装了mathtype,word黏贴没法用解决办法
- Redis-3.2.0集群配置(redis cluster)
- 164. Maximum Gap
- iOS 关于网络数据解析小数位精度丢失问题的修正
- WPF下采用C#实现FTP上传下载获取文件列表