2014-05-24 57 views
1

我知道這可能是一個簡單的問題,但我不想錯過任何小而重要的觀點。迭代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 
} 
+1

第一種方法是用戶友好的,沒有太多的實現細節。兩者都使用迭代器。 –

+0

A鍵設置它也是Iterable(通過Set),這意味着它也可以生成Iterable。比較迭代迭代器的「不同方法」會更好:使用* enchanted for-loop *或更多手動hasNext循環。通過混合鍵集/入口集合,問題僅僅是複雜的,焦點丟失了。 – user2864740

+0

http://stackoverflow.com/questions/3328672/what-are-the-advantages-of-enhanced-for-loop-and- iterator-in-java – user2864740

回答

2

我知道的主要區別在於。

根據JavaDoc

foreach循環 Vs的迭代

需要訪問迭代除去的 當前element.The程序for-each循環隱藏迭代器,所以你不能調用 刪除。因此,for-each循環不能用於過濾。

因此,for-each循環隱藏了迭代器,所以在內部foreach也使用Iterator,但是因爲它隱藏了,所以不能在foreach中使用Iterator的所有優點。


增強for循環的一些限制我想放在這裏是有限制的。

  • 可以通過單個步驟僅迭代正向
+1

多謝先生 –

+2

@ HussainAkhtarWahid'Ghouri'很高興幫助你但是_我不是先生! :)_ –

+1

沒有'先生',評論是小尺寸沒有被張貼:) :) :) –

1

第二種方法允許刪除元素時,第一種方法更短。

+0

多謝先生 –

2

第一種方法是在每個asd1.get(i)處執行哈希查找。第二種方法是迭代鍵/值對而不需要執行查找。所以第二種方法會更快,因此是首選。

我不知道爲什麼你要在一個而不是其他的?

相關問題