[英]Getting concurrent modification exception even after using iterator
Consider the following code: 考虑以下代码:
if(!unmatchedNewTruckRequirementSet.isEmpty()){
for(Iterator<TruckRequirement> iterator = unmatchedNewTruckRequirementSet.iterator(); iterator.hasNext();){
TruckRequirement newTruckRequirement = iterator.next();
for(Iterator<TruckRequirement> iterator1 = oldTruckRequirementSet.iterator(); iterator1.hasNext();){
TruckRequirement oldTruckRequirement1 = iterator1.next();
if(oldTruckRequirement1.getTruckClassName().equals(newTruckRequirement.getTruckClassName())) {
LogUtil.logInfo("Truck Requirement Changed ", "Truck Requirement Changed : From : {0} to {1} where Truck Class is: {2}",
new Object[]{oldTruckRequirement1.getNumberOfTrucks(), newTruckRequirement.getNumberOfTrucks(), newTruckRequirement.getTruckClassName()});
unmatchedNewTruckRequirementSet.remove(newTruckRequirement);
}
}LogUtil.logInfo("Truck Requirement Added ", "New Truck Requirement Added with Truck Class : {0} and number of Trucks : {1}",
new Object[]{newTruckRequirement.getTruckClassName(), newTruckRequirement.getNumberOfTrucks()});
}else {
if(oldTruckRequirementSet.size() > unmatchedNewTruckRequirementSet.size()){
for(TruckRequirement truckRequirement : oldTruckRequirementSet) {
LogUtil.logInfo("Truck Requirement Removed ", "Truck Requirement Removed with Truck Class : {0}",
new Object[]{truckRequirement.getTruckClassName()});
}
}
}
I have used iterator to iterate over the two hashset: unmatchedNewTruckRequiremnetSet
and the other one is oldTruckRequirementSet
. 我已经使用迭代器遍历两个HashSet的:
unmatchedNewTruckRequiremnetSet
,另一种是oldTruckRequirementSet
。 When I try to remove a set from unmatchedNewTruckRequiremnetSet
I get Concurrent modification exception. 当我尝试从
unmatchedNewTruckRequiremnetSet
删除一个集合时,出现并发修改异常。 Please help. 请帮忙。
You will get ConcurrentModificationException
if you use Collection.remove
or add
method while looping. 如果在循环时使用
Collection.remove
或add
方法,则将获得ConcurrentModificationException
。
You must use Iterator.remove()
to remove and avoid the exception. 您必须使用
Iterator.remove()
删除并避免该异常。
for(Iterator<TruckRequirement> iterator1 = oldTruckRequirementSet.iterator(); iterator1.hasNext();){
TruckRequirement oldTruckRequirement1 = iterator1.next();
if(oldTruckRequirement1.getTruckClassName().equals(newTruckRequirement.getTruckClassName())) {
LogUtil.logInfo("Truck Requirement Changed ",
"Truck Requirement Changed : From : {0} to {1} where Truck Class is: {2}",
new Object[]{oldTruckRequirement1.getNumberOfTrucks(),
newTruckRequirement.getNumberOfTrucks(), newTruckRequirement.getTruckClassName()});
// Use the iterator to remove
iterator1.remove();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.