我需要一个像HashMap
或任何其他Collection
这样的数据结构,它将在遍历期间更新。我尝试使用HashMap
遍历ConcurrentHashMap
,LinkedHashMap
和Iterator
,但我无法获得结果。代码片段是:
Map<String, String> linkscoll = new ConcurrentHashMap<String, String>();
linkscoll.put("ABC", "ABC");
for(Iterator it = linkscoll.entrySet().iterator(); it.hasNext(); )
{
Map.Entry entry = (Map.Entry)it.next();
String temp = (String) entry.getValue();
System.out.println(temp);
linkscoll.put("DEF", "DEF");
}
我的输出应该是:
ABC
DEF
但它正在给出输出 ABC
我真的需要这个。请帮我。感谢。
答案 0 :(得分:2)
我认为你不能用简单的HashMap
。可以迭代LinkedHashMap
,因为它保留了插入顺序。链接的LinkedHashMap
Javadoc说(部分)
所有类的集合视图方法返回的集合的
iterator
方法返回的迭代器是 fail-fast :如果在迭代器之后的任何时候对映射进行结构修改以任何方式创建,除非通过迭代器自己的remove
方法,迭代器将抛出ConcurrentModificationException
。因此,在并发修改的情况下,迭代器快速而干净地失败,而不是在未来的未确定时间冒着任意的,非确定性行为的风险。
答案 1 :(得分:1)
试试这个:
for (Map.Entry<KeyObject, ValueObject> entry : yourHashMap.entrySet()){
ValueObject thisObject = entry.getValue();
///Do stuff to thisObject
}
答案 2 :(得分:0)
您需要使用iterator (java.util.Iterator)
(See Here)
但是如果你想修改任何东西,那么你必须使用迭代器来完成它,否则你将获得concurrentModificationException
。