android移除数据

在Android开发中,当尝试在遍历过程中修改List时,可能会遇到ConcurrentModificationException异常。本文介绍了作者在项目中遇到的问题,即在List数量为0时尝试删除数据,导致应用崩溃。通过理解该异常的原因——对List结构的修改,作者改为使用迭代器进行删除,从而解决了问题。尽管问题得到解决,但作者仍对此现象背后的原理保持好奇,进一步深入研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写项目,经常对list的数据增删改查,今天碰到一个问题,在数量为0的时候需要删除这条数据,直接想到了list.remove();方法。

但是运行的时候发现挂掉了报错:ConcurrentModificationException。

网上查到很多对ConcurrentModificationException异常的解释文章。看完后明白怎么一回事了,是对list的结构进行了修改。

/** 
*在Iterator的内部有个expectedModCount 变量, 
*该变量每次初始化*Iterator的时候等于ArrayList的modCount,modCount记录了对ArrayList的结构修改次数, 
*在通过Iterator对ArrayList进行结构的修改的时候都会将expectedModCount 与modCount同步, 
*但是如果在通过Iterator访问的时候同时又通过索引的方式去修改ArrayList的结构的话, 
*由于通过索引的方式只会修改modCount不会同步修改expectedModCount 就会导致 
*modCount和expectedModCount不相等就会抛ConcurrentModificationException, 
*这也就是Iterator的fail-fast,快速失效的。所以只要采取一种方式操作ArrayList就不会出问题, 
*当然ArrayList不是线程安全的,此处不讨论对线程问题。 

*/

还有一点模糊就是我的项目里只用了索引,是之后改成迭代才解决的问题。

for (ProductUp p : temps) {
           if (list_cxp.size() != 0 && list_cxp != null) {
                    Iterator iterator = list_cxp.iterator();
                     while (iterator.hasNext()) {
                       Product pd = (Product) iterator.next();
                        if (p.getGoods_id().equals(pd.getId())) {
                            iterator.remove();
                           }
                       }
               }
      }

问题是解决了,但还是存在疑问,接着去研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值