我编写了以下代码,导致并发修改异常.我该怎样预防呢?我们的想法是逃避Map的所有值,并使用新的param map重新构建对象(dO).
try {
Map<String,String[]> paramMap = dO.getParameterMap();
Set<Map.Entry<String, String[]>> entries = paramMap.entrySet();
Iterator<Map.Entry<String, String[]>> it = entries.iterator();
while (it.hasNext()) {
Map.Entry<String, String[]> entry = it.next();
String[] values = entry.getValue();
List<String> valList = new ArrayList<String>();
if (values != null) {
for (String value : values) {
valList.add(escapeHTML(value));
}
dO.removeParameter(entry.getKey());
Run Code Online (Sandbox Code Playgroud)
//请注意,Parameter是一个hashMap所以,是否需要在插入之前先删除该条目,否则它将替换与key关联的新值.它在Java中如何工作?
dO.addParameter(entry.getKey(),valList.toArray(new String[valList.size()]));
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*.Xu 12
抛出异常是因为您在迭代时添加/删除地图中的内容:
dO.removeParameter(entry.getKey());
dO.addParameter(entry.getKey(),valList.toArray(new String[valList.size()]
Run Code Online (Sandbox Code Playgroud)
你应该用iterator.remove().