`

Exception in thread "Thread-13" java.util.ConcurrentModificationException

    博客分类:
  • java
 
阅读更多

参考:http://blog.163.com/asd_wll/blog/static/210310402011627609901/

 

 

经常我们要删除集合中的某些元素。有些可能会这么写。 

Java代码  收藏代码
  1. public void operate(List list){  
  2.         for (Iterator it = list.iterator(); it.hasNext();) {  
  3.             String str =  (String)it.next();  
  4.             if (str.equals("chengang")){  
  5.                 list.remove(str);  
  6.             }  
  7.         }  
  8.     }  


这种写法一运行就会报如下异常: 
 

Java代码  收藏代码
  1. Exception in thread "main" java.util.ConcurrentModificationException  
  2. t java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)  


  因为list在循环中的时候是不可以删除它的元素的。后来我是这样做的,一种很笨的方法,思路是这样的:创建一个List专门存放要被删除的元素,循环过后,用List.removeAll方法把元素删除。代码如下: 
   

Java代码  收藏代码
  1. public void operate(List list){  
  2.         List removeList= new ArrayList();  
  3.         for (Iterator it = list.iterator(); it.hasNext();) {  
  4.             String str =  (String)it.next();  
  5.             if (str.equals("chengang")){  
  6.                 removeList.add(str);  
  7.             }  
  8.         }  
  9.         list.removeAll(removeList);  
  10.     }  
  11.       


  这样也确实可以解决问题了,但是方法实在太笨重,其实可以有更简单的更高效的方法,就是用Iterator.remove方法,如下: 
      

Java代码  收藏代码
  1. for (Iterator it = list.iterator(); it.hasNext();) {  
  2.            String str =  (String)it.next();  
  3.            if (str.equals("chengang")){  
  4.                it.remove();  
  5.            }  
  6.        }  
  7.      


 所以,你对Java的基础知识了解越多,代码就会写得越简洁。相反如果你的代码特别复杂,则方法或设计一定有问题。

分享到:
评论

相关推荐

    java.util.ConcurrentModificationException 异常问题详解1

    Java.util.ConcurrentModificationException 异常问题详解 ConcurrentModificationException 异常是 Java 中一个常见的异常,它发生在 Iterator 遍历集合时,集合同时被修改引起的异常。在 Java 中,集合类如 ...

    Exception in thread “main“ java.util.InputMismatchException.pdf

    在Java编程语言中,`java.util.InputMismatchException`是一个常见的运行时异常,它通常发生在尝试从数据源(如控制台、文件或数据库)读取数据时,遇到的数据类型与预期的不匹配。在这个特定的场景中,问题出在主线...

    asm-util-3.2.jar

    asm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util...

    asm-util.jar

    asm-util-1.3.4.jar, asm-util-1.3.5.jar, asm-util-1.4.1.jar, asm-util-1.4.3.jar, asm-util-1.5.1.jar, asm-util-1.5.2.jar, asm-util-1.5.3.jar, asm-util-2.0.jar, asm-util-2.1.jar, asm-util-2.2.1-sources....

    ws-commons-util-1.0.2.zip_ws-comm-util.jar

    【标题】"ws-commons-util-1.0.2.zip_ws-comm-util.jar" 提供的是一个名为 ws-commons-util 的库的版本1.0.2,这个库经过压缩打包成ZIP格式,其中包含了 ws-comm-util.jar 文件。这个JAR文件是Java应用程序中常见的...

    jetty-util-9.4.43.v20210629-API文档-中文版.zip

    赠送jar包:jetty-util-9.4.43.v20210629.jar; 赠送原API文档:jetty-util-9.4.43.v20210629-javadoc.jar; 赠送源代码:jetty-util-9.4.43.v20210629-sources.jar; 赠送Maven依赖信息文件:jetty-util-9.4.43.v...

    protobuf-java-util-3.1.0.jar

    protobuf-java-util-3.1.0.jar下载,配合protobuf3.1.jar的util包

    apr-1.4.6.tar.gz、apr-iconv-1.2.1.tar.gz、apr-util-1.4.1.tar.gz

    本文将详细解析标题和描述中提到的几个关键压缩包:`apr-1.4.6.tar.gz`、`apr-iconv-1.2.1.tar.gz` 和 `apr-util-1.4.1.tar.gz`,这些都是Apache安装的重要组成部分。 首先,`apr-1.4.6.tar.gz` 是APR库的主要版本...

    cors-filter-1.7.jar java-util-1.9.1.jar

    在给定的文件信息中,我们看到两个重要的文件:"cors-filter-1.7.jar" 和 "java-util-1.9.1.jar",这些都是与Java相关的库文件,通常用于增强应用程序的功能。 首先,让我们来详细探讨"Cors Filter"。CORS(Cross-...

    backport-util-concurrent.jar

    backport-util-concurrent.jarbackport-util-concurrent.jarbackport-util-concurrent.jar

    jetty-util-9.4.11.v20180605-API文档-中文版.zip

    赠送jar包:jetty-util-9.4.11.v20180605.jar; 赠送原API文档:jetty-util-9.4.11.v20180605-javadoc.jar; 赠送源代码:jetty-util-9.4.11.v20180605-sources.jar; 赠送Maven依赖信息文件:jetty-util-9.4.11.v...

    jetty-util-ajax-9.3.19.v20170502-API文档-中英对照版.zip

    赠送jar包:jetty-util-ajax-9.3.19.v20170502.jar; 赠送原API文档:jetty-util-ajax-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-util-ajax-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-...

    jdk-8u241-linux-x64.tar.gz

    5. **日期与时间API**:`java.time`包替代了过时的`java.util.Date`和`java.util.Calendar`,提供了更直观、易用且功能丰富的日期和时间API,如`LocalDate`, `LocalTime`, `LocalDateTime`, `ZonedDateTime`等。...

    jdk-8u251-linux-x64.tar.gz

    4. **日期和时间API的改进**:JDK8引入了新的`java.time`包,替换原有的`java.util.Date`和`java.util.Calendar`,提供了更加友好和易用的日期和时间API。 5. **接口的默认方法**:接口现在可以定义默认方法,这些...

    jdk-8u201-linux-x64.tar.gz jdk8版本下载

    日期和时间API的改进则消除了对`java.util.Date`和`java.util.Calendar`类的依赖,提供了更直观的日期和时间操作。 在Linux环境中,JDK的使用还包括配置Tomcat、Eclipse等Java应用服务器和IDE,以及进行Java项目的...

    jdk-8u151-linux-x64.tar.gz 【官方jdk1.8 linux版】

    - **Date和Time API的改进**:移除了旧的`java.util.Date`和`java.util.Calendar`,引入了新的`java.time`包,提供更强大、更易用的时间日期处理功能。 - **方法引用来替代匿名内部类**:可以引用一个方法的签名,...

Global site tag (gtag.js) - Google Analytics