Java - 线程“主”中的异常 java.util.ConcurrentModificationException

2024-05-04

有什么办法可以修改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(使用前将#替换为@)

Java - 线程“主”中的异常 java.util.ConcurrentModificationException 的相关文章

随机推荐