文档章节

删除对象的list出现的问题解决

斯芬克斯的翅膀
 斯芬克斯的翅膀
发布于 2016/04/15 18:11
字数 186
阅读 3
收藏 0


我们对一个对象的list或者map进行删除操作时,可能会这么写

       for(Distributor distributor:distributorList){
    String distributorShort =distributor.getDistributorShort();            
    if(!MyString.isNoEmpty(distributorShort)|| 
        distributorShort.toUpperCase().indexOf(queryDistributorNameShowDis)==-1){
        distributorList.remove(distributor);
    }
}

但是执行时,会出现一个线程问题的异常 Exception in thread "main" java.util.ConcurrentModificationException ,不能这么删除

这个异常产生的原因有几个。

一是直接对集合调用删除操作而不是在枚举器上。

二是不同的线程试图对集合进行增删操作的时候。

解决办法就是用Iterator,就不会报这个异常了。

Iterator<Distributor> it = distributorList.iterator();

            while(it.hasNext()){

                Distributor distributor = it.next();

                String distributorShort = distributor.getDistributorShort();

                if(!MyString.isNoEmpty(distributorShort)|| 
                    distributorShort.toUpperCase().indexOf(queryDistributorNameShowDis)==-1){

                    it.remove();

                }

            }

© 著作权归作者所有

共有 人打赏支持
斯芬克斯的翅膀
粉丝 0
博文 6
码字总数 9281
作品 0
朝阳
程序员
Java编程:删除 List 元素的三种正确方法

删除 List 中的元素会产生两个问题: 删除元素后 List 的元素数量会发生变化; 对 List 进行删除操作可能会产生并发问题; 我们通过代码示例演示正确的删除逻辑 执行 remove11 方法,出现如下...

qq948939246
03/27
0
0
Java ConcurrentModificationException 异常分析与解决方案

一、单线程 1. 异常情况举例 只要抛出出现异常,可以肯定的是代码一定有错误的地方。先来看看都有哪些情况会出现ConcurrentModificationException异常,下面以ArrayList remove 操作进行举例...

LIU-X1001
2016/05/31
28
0
Java 基础(二)集合源码解析 Iterator

首先,在探索集合之前,我们先来思考一个问题,集合是什么? 针对一个特定的问题,如果事先不知道需要多少个对象,或者它们的持续时间有多长,那么也不知道如何保存那些对象。既然如此,怎样...

diamond_lin
2017/09/24
0
0
hibernate中数据库的优化

3、list和iterate不同 a)list取所有 b)literate先取ID,等到用的时候根据ID取对象 c)session中list第二次发出,仍会到数据库查询。 d)iterate第二次,先找session级缓存。 4、一级缓存和...

dailei1021
2014/05/25
0
0
C#中数组、ArrayList和List三者的区别

[引用BobWei的blog:https://www.cnblogs.com/BObwei/p/4869157.html] 在C#中,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。 数组 数组在C#中是最早出现的。它在内存...

fsspring
07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

白话SpringCloud | 第五章:服务容错保护(Hystrix)

前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用。在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如网...

oKong
27分钟前
0
0
【解惑】领略Java内部类的“内部”

内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中...

偶尔诗文
今天
1
0
sqlserver 2008 r2 直接下载地址(百度云)

之前下载的sqlserver2008发现不能附加,就卸载了,重新找到了sqlserver2008R2的百度云资源 卸载sqlserver2008还是有点麻烦,不过就是需要删除注册表中的信息 自己来回卸载了3次终于重装sqlse...

dillonxiao
今天
1
0
[Java]JVM调优总结 -Xms -Xmx -Xmn -Xss

JVM调优总结 -Xms -Xmx -Xmn -Xss 博客分类: Java General JVM应用服务器电信CMS算法 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可...

morpheusWB
今天
2
0
C++ std::function 和 std::bind

C++11提供了std::function和std::bind两个工具,用于引用可调用对象。这些可调用对象包括 普通函数,Lambda表达式,类的静态成员函数,非静态成员函数以及仿函数等。引用可调用对象,可以用于...

yepanl
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部