在单线程环境下的解决办法

public void remove() {
if (lastRet == -1)
throw new IllegalStateException();
checkForComodification(); try {
AbstractList.this.remove(lastRet);
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
} catch (IndexOutOfBoundsException e) {
throw new ConcurrentModificationException();
}
}

 在这个方法中,删除元素实际上调用的就是list.remove()方法,但是它多了一个操作:

expectedModCount = modCount;

因此,在迭代器中如果要删除元素的话,需要调用Itr类的remove方法。

  将上述代码改为下面这样就不会报错了:

public class Test {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(2);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
Integer integer = iterator.next();
if(integer==2)
iterator.remove(); //注意这个地方
}
}
}

在多线程环境下的解决方法

           List<String> myList = new CopyOnWriteArrayList<String>();
myList.add( "1");
myList.add( "2");
myList.add( "3");
myList.add( "4");
myList.add( "5"); new Thread(new Runnable() { @Override
public void run() {
for (String string : myList) {
System.out.println("遍历集合 value = " + string); try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start(); new Thread(new Runnable() { @Override
public void run() { for (int i = 0; i < myList.size(); i++) {
String value = myList.get(i); System.out.println("删除元素 value = " + value); if (value.equals( "3")) {
myList.remove(value);
i--; // 注意
} try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start(); ---------------------
作者:love_world_
来源:CSDN
原文:https://blog.csdn.net/androiddevelop/article/details/21509345
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. Resize Instance 操作详解 - 每天5分钟玩转 OpenStack(41)
  2. linux忘记mysql密码找回方法
  3. Silver Cow Party(最短路,好题)
  4. 配置EF链接 MySql 的方法
  5. C和指针笔记 3.7 存储类型
  6. SVG添加链接(转载)
  7. android线程间通讯
  8. SPSS方差分析
  9. HTTP response codes
  10. IM 融云 之 安装cocoapods 安装 SDK
  11. Flash加载ini文件!
  12. SpringBoot构建RESTful service完成Get和Post
  13. 一:学习Linux前准备工作
  14. Redis集群 - Sentinel与RAFT算法
  15. .net core2 api
  16. log4j2 的使用
  17. cmd 运行(打包后的)java程序
  18. js 操作json对象增删改
  19. 20145332卢鑫 WEB安全基础实验
  20. 贪心——HDU-5969 最大的位或

热门文章

  1. Jmeter将JDBC Request查询结果作为下一个接口参数方法
  2. (转)Centos7安装配置NFS服务和挂载
  3. Main函数中的参数argc,argv的使用简单解析
  4. 优化vue-cli构建的文件体积
  5. fleet - 基于Machine Metadata的任务调度
  6. Java语法基础(2)
  7. Log Structured Merge Trees(LSM) 算法
  8. PHP超全局变量、魔术变量和魔术方法
  9. uvm_mem_mam——寄存器模型(十三)
  10. Kail安装后的配置