有什么办法可以修改HashMap
迭代特定键时的值?
下面给出一个示例程序:
public static void main(String[] args) {
HashMap<Integer,ArrayList<String>> hm = new HashMap<Integer, ArrayList<String>>();
ArrayList<String> ar = new ArrayList<String>();
for(int i=0;i<50;i++){
ar.add(Integer.toString(i));
}
hm.put(1, ar);
for(String s:hm.get(1)){
hm.get(1).add("hello");
}
}
抛出错误:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at Excp.main(Excp.java:17)
当不允许此类修改时,检测到对象的并发修改的方法可能会引发此异常。
下面的一段代码导致了这个问题。
for(String s:hm.get(1)){
hm.get(1).add("hello");
}
您正在迭代和修改相同的内容。通过创建来避免这种情况new ArrayList
ArrayList<String> ar1 = new ArrayList<String>();
for (String s : hm.get(1)) {
ar1.add("hello");
}
读一读here http://docs.oracle.com/javase/7/docs/api/java/util/ConcurrentModificationException.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)