两种迭代HashMap的方法有什么区别

时间:2014-05-24 03:52:07

标签: java map hashmap

我知道这可能是一个简单的问题,但我不想错过任何小而重要的观点。

请解释遍历HashMap

的方法之间的区别
HashMap<Integer, Integer> asd1 = new HashMap<Integer, Integer>();
asd1.put(1,11);
asd1.put(2,22);
asd1.put(3,33);

// approach 1
for(int i:asd1.keySet())
{
    System.out.println(i+" : "+asd1.get(i));
}

// approach 2

Iterator it = asd1.entrySet().iterator();
while (it.hasNext())
{
    Map.Entry pairs = (Map.Entry)it.next();
    System.out.println(pairs.getKey() + " : " + pairs.getValue());
    it.remove(); // avoids a ConcurrentModificationException
}

3 个答案:

答案 0 :(得分:2)

我所知道的主要区别是。

根据JavaDoc

  

ForEach循环迭代器

     

程序需要访问迭代器才能删除   当前元素.for-each循环隐藏了迭代器,所以你不能   呼叫删除。因此,for-each循环不能用于过滤。

所以for-each循环隐藏了迭代器,所以内部foreach也使用Iterator但是因为隐藏了你不能在foreach中利用Iterator的所有优点。


增强for循环有一些限制,我想在这里提出一个限制。

  • 可以通过单步迭代前进

答案 1 :(得分:2)

第一种方法是在每个asd1.get(i)执行哈希查找。第二种方法是迭代键/值对而无需进行查找。所以第二种方法会更快,因此更受欢迎。

我不确定你为什么要在一个而不是另一个中删除?

答案 2 :(得分:1)

第二种方法允许删除元素,第一种方法更短。