Java并发修改exception

我编写了以下代码,导致并发修改exception。 我该怎样预防呢? 我们的想法是逃避Map的所有值,并使用新的param map重新构建对象(dO)。

try { Map paramMap = dO.getParameterMap(); Set<Map.Entry> entries = paramMap.entrySet(); Iterator<Map.Entry> it = entries.iterator(); while (it.hasNext()) { Map.Entry entry = it.next(); String[] values = entry.getValue(); List valList = new ArrayList(); if (values != null) { for (String value : values) { valList.add(escapeHTML(value)); } dO.removeParameter(entry.getKey()); 

//请注意参数是一个hashMap所以,是否需要在插入之前先删除该条目,否则它将替换与key关联的新值。 它在Java中如何工作?

  dO.addParameter(entry.getKey(),valList.toArray(new String[valList.size()])); } } } 

抛出exception是因为您在迭代时添加/删除地图中的内容:

 dO.removeParameter(entry.getKey()); dO.addParameter(entry.getKey(),valList.toArray(new String[valList.size()] 

你应该使用iterator.remove()代替。

不确定您是否需要更改Map的键,看起来您要做的就是更改数组中的值。

 for(String[] values: dO.getParameterMap().values()) for (int i = 0; i < values.length; i++) values[i] = escapeHTML(values[i]); 

我会确保Map确实存储了null值。 但如果你不能改变它,你需要添加if(values != null)

只有在更改地图中的某个键时才应删除/添加。 正如我在代码中看到的那样,您只是在改变价值。 因此,您可以使用entry.setValue(...)