获取concurrentmodificationexception而不进行任何替换,删除或添加到String数组

时间:2015-11-10 15:33:02

标签: java android

当for循环通过Set时,我得到concurrentmodificationexception。 for循环中的代码中没有包含remove,add或replace的部分,这可能导致此异常。下面是一个代码段(我所拥有的简化代码)

Configuration config= new Configuration();
Set<String> events = config.getEvents();
String[] evta=null;
for(String evt: events){
   evta=evt.split(";");
   //... using the evta for creating new strings but not adding, removing or modifying the events Set<String>.

}  

所以,我想知道它可能导致这个异常。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

不得修改events,同时迭代它;要避免ConcurrentModificationException您需要使用Iterator

    Iterator<String> iter = events.iterator();
    while(iter.hasNext())
    {
        String item = iter.next();
        if(item.equals(<what>)) {
            iter.remove(); //or split() or whatever.
        }
    }

请显示更多行以确定哪一行特别导致修改后备阵列,从而抛出ConcurrentModificationException但使用迭代器很可能会避免它。

答案 1 :(得分:0)

  

for循环中的代码中没有任何部分包含删除,添加或替换,这可能导致此异常。

好吧,假如只有在某些事情在迭代过程中修改了集合时才抛出异常,那就不是真的了。

您的代码的某些部分正在修改该集合:

  • 可能是另一个主题。
  • 可能是在循环中直接或间接调用的某种方法中发生了变化。
  • 可能是通过另一个收集包装进行更改。

然而,这都是猜测。如果您想要一个比&#34更好的答案,请再次查看&#34;,您需要向我们展示问题的MCVE。