zoukankan      html  css  js  c++  java
  • Java ConcurrentModificationException 异常分析与解决方案

    Java ConcurrentModificationException 异常分析与解决方案
    http://www.2cto.com/kf/201403/286536.html

    java.util.ConcurrentModificationException 解决办法 
    http://blog.csdn.net/lipei1220/article/details/9028669

    原因:Iterator做遍历的时候,HashMap被修改(bb.remove(ele), size-1),Iterator(Object ele=it.next())会检查HashMap的size,size发生变化,抛出错误ConcurrentModificationException。

    // 1 使用Iterator提供的remove方法,用于删除当前元素
     for (Iterator<string> it = myList.iterator(); it.hasNext();) {
         String value = it.next();
          if (value.equals( "3")) {
              it.remove();  // ok
         }
    }
    System. out.println( "List Value:" + myList.toString());
     
     // 2 建一个集合,记录需要删除的元素,之后统一删除            
    List<string> templist = new ArrayList<string>();
     for (String value : myList) {
          if (value.equals( "3")) {
              templist.remove(value);
         }
    }
     // 可以查看removeAll源码,其中使用Iterator进行遍历
    myList.removeAll(templist);
    System. out.println( "List Value:" + myList.toString());       
     
      // 3. 使用线程安全CopyOnWriteArrayList进行删除操作
    List<string> myList = new CopyOnWriteArrayList<string>();
    myList.add( "1");
    myList.add( "2");
    myList.add( "3");
    myList.add( "4");
    myList.add( "5");
     
    Iterator<string> it = myList.iterator();
     
     while (it.hasNext()) {
         String value = it.next();
          if (value.equals( "3")) {
              myList.remove( "4");
              myList.add( "6");
              myList.add( "7");
         }
    }
    System. out.println( "List Value:" + myList.toString());
     
     // 4. 不使用Iterator进行遍历,需要注意的是自己保证索引正常
     for ( int i = 0; i < myList.size(); i++) {
         String value = myList.get(i);
         System. out.println( "List Value:" + value);
          if (value.equals( "3")) {
              myList.remove(value);  // ok
              i--; // 因为位置发生改变,所以必须修改i的位置
         }
    }
    System. out.println( "List Value:" + myList.toString());
  • 相关阅读:
    关于json操作,这里再为大家推荐几款比较实用的json在线工具
    JS操作JSON总结
    HTML WebSocket
    HTML应用程序缓存
    前段也能学习网址
    简述jpg。Gif。png-8.png-24的区别,分别使用场景
    HTML相关问题
    html5移动端知识点总结
    html5本地存储(localStorage)使用介绍
    node环境变量----新全局包管理配置
  • 原文地址:https://www.cnblogs.com/bluestorm/p/6347227.html
Copyright © 2011-2022 走看看