android细节之java.util.ConcurrentModificationException异常

今天在做android项目的时候,遇到了这个异常,好吧,其实平常遇到最多的异常是IllegalstateException,都是跟我们硬件相连的SDK抛出来的,把我折磨的欲生欲死啊。扯远了。说回到今天的这个异常,java.util.ConcurrentModificationException异常,一开始我愣了一下,貌似从来没遇到过这个,然后果断百度大神,这才发现:

原因是你遍历该集合时,对该集合进行了删除元素的操作导致的,如果你有删除元素的必要,建议赋值到另一个集合,然后对他进行删除操作.

偶出现错误的地方:

if (serverCards != null) {
			for (PaymentCard serverCard : serverCards) {
				MstCard matchingMstCard = findMatchingMstCard(serverCard,
						mstCards);
				ChargecaseCard matchingChargecaseCard = findMatchingChargecaseCard(
						serverCard, chargecaseCards);
				if (matchingMstCard != null && matchingChargecaseCard != null) {
					matchingMstCard.setDominantColor(serverCard
							.getDominantColor());
					matchingChargecaseCard.setDominantColor(serverCard
							.getDominantColor());
					unifiedCards.add(new UnifiedCard(matchingMstCard,
							serverCard, matchingChargecaseCard));
					mstOnlyCards.remove(matchingMstCard);
					chargecaseOnlyCards.remove(matchingChargecaseCard);
				} else if (matchingMstCard != null
						&& matchingChargecaseCard == null) {
					matchingMstCard.setDominantColor(serverCard
							.getDominantColor());
					unifiedCards.add(new UnifiedCard(matchingMstCard,
							serverCard));
					mstOnlyCards.remove(matchingMstCard);
				} else if (matchingMstCard == null
						&& matchingChargecaseCard != null) {
					matchingChargecaseCard.setDominantColor(serverCard
							.getDominantColor());
					unifiedCards.add(new UnifiedCard(serverCard,
							matchingChargecaseCard));
					chargecaseOnlyCards.remove(matchingChargecaseCard);
				} else {
					serverOnlyCards.add(serverCard);
				}
			}
		}

		for (MstCard card : mstOnlyCards) {
			ChargecaseCard matchingChargecaseCard = findMatchingChargecaseCard(
					card, chargecaseCards);
			if (matchingChargecaseCard != null) {
				matchingChargecaseCard
						.setDominantColor(card.getDominantColor());
				unifiedCards.add(new UnifiedCard(card, null,
						matchingChargecaseCard));
				chargecaseOnlyCards.remove(matchingChargecaseCard);
			} else {
				unifiedCards.add(new UnifiedCard(card));
			}
		}

		for (ChargecaseCard card : chargecaseOnlyCards) {
			unifiedCards.add(new UnifiedCard(card));
		}

		for (PaymentCard card : serverOnlyCards) {
			unifiedCards.add(new UnifiedCard(card));
		}

		return unifiedCards;

在一个for循环中mstOnlyCards调用了,mstOnlyCards.remove()方法。

特记录之,引以为戒。

android细节之java.util.ConcurrentModificationException异常

时间: 2024-10-13 00:19:09

android细节之java.util.ConcurrentModificationException异常的相关文章

android详细信息java.util.ConcurrentModificationException变态

在今天做android当项目,我遇到了这个异常,好吧.其实最不寻常遇到异常IllegalstateException.它们与我们的硬件连接SDK抛出,我想折磨学生阿玉啊.扯远了. 今天,我想回到这个异常.java.util.ConcurrentModificationException异常,一開始我愣了一下.貌似从来没遇到过这个,然后果断百度大神.这才发现: 原因是你遍历该集合时.对该集合进行了删除元素的操作导致的.假设你有删除元素的必要,建议赋值到还有一个集合,然后对他进行删除操作. 偶出现错

java.util.ConcurrentModificationException异常分析

Java在操作ArrayList.HashMap.TreeMap等容器类时,遇到了java.util.ConcurrentModificationException异常.以ArrayList为例,如下面的代码片段: [java] view plaincopy import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.CopyOnWriteArr

java.util.ConcurrentModificationException异常原因及解决方法

在java语言中,ArrayList是一个很常用的类,在编程中经常要对ArrayList进行删除操作,在使用remove方法对ArrayList进行删除操作时,报java.util.ConcurrentModificationException异常,下面探讨一下该异常的原因以及解决办法. 1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class Test { 5 6 public static void mai

java集合--java.util.ConcurrentModificationException异常

ConcurrentModificationException 异常:并发修改异常,当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常.一个线程对collection集合迭代,另一个线程对Collection进行修改的时候, 就会出现上面的异常. 下面看一下代码: package cn.itcast.p4.list.demo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; pub

java.util.ConcurrentModificationException 异常解决办法及原理

最近在修程序的bug,发现后台抛出以下异常: Exception in thread "main" java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$KeyIterator.next(HashMap.java:828) at com.keyman.demo.test.ClearResult

Java处理java.util.ConcurrentModificationException异常

代码: public static void reduce(HashMap<String, Integer> hashMap, final Integer count) { Iterator<String> iter = hashMap.keySet().iterator(); String key; while(iter.hasNext()) { key = iter.next(); if (!hashMap.get(key).equals(count)) { hashMap.r

Exception in thread &quot;Thread-1&quot; java.util.ConcurrentModificationException 异常原因和解决方法

注:参考博客:https://www.cnblogs.com/dolphin0520/p/3933551.html1.单线程环境下的异常重现 public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); list.add(2); Iterator<Integer> iterator = list.iterator(); while(iterator

list删除操作 java.util.ConcurrentModificationException

首先大家先看一段代码: public static void main(String[] args) { List<String> listStr = new ArrayList<String>();      listStr.add("1");      listStr.add("2");      listStr.add("3");      listStr.add("4");      listS

java.util.ConcurrentModificationException故障分析

问题描述账号打通上线后发现偶尔会出现java.lang.RuntimeException: java.util.ConcurrentModificationException异常,这个是在生成请求签名的时候发生的问题,经分析应该是阿里云网关比较老版本的方法有bug.这个会导致线上用户突然掉线,体验太差. 出现该Exception的根本原因在对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异