如何在java中动态遍历和更新像HashMap这样的集合?

时间:2015-06-11 04:12:57

标签: java hashmap

我需要一个像HashMap或任何其他Collection这样的数据结构,它将在遍历期间更新。我尝试使用HashMap遍历ConcurrentHashMapLinkedHashMapIterator,但我无法获得结果。代码片段是:

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

我真的需要这个。请帮我。感谢。

3 个答案:

答案 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