我知道这可能是一个简单的问题,但我不想错过任何小而重要的观点。
请解释遍历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
}
答案 0 :(得分:2)
我所知道的主要区别是。
根据JavaDoc
ForEach循环与迭代器
程序需要访问迭代器才能删除 当前元素.for-each循环隐藏了迭代器,所以你不能 呼叫删除。因此,for-each循环不能用于过滤。
所以for-each循环隐藏了迭代器,所以内部foreach也使用Iterator但是因为隐藏了你不能在foreach中利用Iterator的所有优点。
增强for循环有一些限制,我想在这里提出一个限制。
答案 1 :(得分:2)
第一种方法是在每个asd1.get(i)
执行哈希查找。第二种方法是迭代键/值对而无需进行查找。所以第二种方法会更快,因此更受欢迎。
我不确定你为什么要在一个而不是另一个中删除?
答案 2 :(得分:1)
第二种方法允许删除元素,第一种方法更短。