【发布时间】:2019-01-19 10:32:34
【问题描述】:
我创建了以下代码。 我的目标是在读取集合时检查使用迭代器删除元素。 谁能解释为什么在将哈希图的值集合添加到链表并为该列表创建迭代器后会引发 concurrentModificationException,但在将集合添加到列表后获取迭代器时不会引发相同的问题?
我知道原因很简单,我想要一些容易获得的东西,但我只是想确认我的想法是否正确。
还有 2 点。 1. 由于 hashmap 不是线程安全的,为什么我们不能在迭代器读取时向其中添加任何元素? 2. 如果是,那么我们如何从地图中移除元素?
package com.Users;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
public class Temp{
public static void main(String arg[]){
HashMap<String, String> map=new HashMap();
map.put("A", "B");
map.put("C", "D");
LinkedList<String> list=new LinkedList<>();
//****** concurent exception is thrown when ever line 1 is swapped with line 2 ******
Iterator<String> iterator=list.iterator(); //line no. 1
list.addAll(map.values()); //line no. 2
//******************
while(iterator.hasNext()){
if(iterator.next().equals("B")){
iterator.remove();
}
}
System.out.println(list);
}
}
【问题讨论】:
标签: collections linked-list hashmap thread-safety concurrenthashmap