现象:在对集合进行操作【增删改查】的时候,需要遍历集合,在遍历集合的过程中我们想着对集合增删改查,结果总是报这个错误。
原因:迭代器的线程和集合的线程不是同步的,最开始迭代器计算出了集合的size,当集合Size由于增上改查导致size的变化,迭代器并没有同步,这样虚拟机在运行的时候就导致了冲突。
解决方法:克隆,增加一个副本,在遍历的时候,对集合在遍历和增删改查过程中存放于另外一个集合,这样我们最后使用另外一个集合代替原来的集合,就实现了几个遍历过程中的增删改查。
下面代码是一个map增加一条记录的例子:
List<Map<String,String>> listMap=null;
listMap=evoucherDeleteTable.queryForPageDelete(styeay);
List<Map<String,String>> newlist = new ArrayList<Map<String,String>>();
//遍历,添加表名說明
for(Map<String, String> map:listMap){
Set<String> set = map.keySet();
Iterator<String> iterator=set.iterator();
// Map<String,String> newmap=new Map();
Map<String, String> newmap = new HashMap<String, String>();
while (iterator.hasNext()){
String mapentry = iterator.next();
if(map.get("table_name").equals("ASSP_VOUCHER_SIGN_2014")){
newmap.put("table_name", "ASSP_VOUCHER_SIGN_2014");
newmap.put("explaination", "不传位置的服务端签名");
newlist.add(newmap);
}
}
}
Map<String,List<Map<String,String>>> resultMap = new HashMap<String,List<Map<String,String>>>();
resultMap.put("data", newlist);