2011-03-25 39 views

回答

17

這和我們儘可能接近地遍歷地圖是一樣的,因爲您必須說明是否只需要鍵,值或整個鍵/值條目。對於集合和列表,只有一個選項,因此不需要單獨的方法來執行此操作。

順便說一句:這是我如何遍歷一個Map。注意泛型,for-each循環和LinkedHashMap的使用,使得條目以某種邏輯順序出現。 TreeMap將是另一個不錯的選擇。

Map<K,V> m=new LinkedHashMap<K,V>(); 
for(Map.Entry<K,V> entry: m.entrySet()) 
    System.out.println(entry.getKey() + ": " + entry.getValue()); 

在Java 8,你可以寫

m.forEach((k, v) -> System.out.println(k + ": " + v)); 
+0

那麼不需要迭代器? – Jwan622 2016-01-07 17:13:04

+1

@ Jwan622 for-each循環是在Java 5.0(2004)中添加的,它將爲您管理迭代器。對於集合,仍然有一個迭代器,但不需要直接使用它(除非你想刪除條目) – 2016-01-07 17:55:18

+0

啊,所以在後臺有一個迭代器...明白了。因此,一般來說,我們使用地圖對象,調用entrySet將其變爲一個集合對象,然後我們通過將其映射到Map.Entry的切片上來迭代該集合對象。你會怎麼說呢? – Jwan622 2016-01-07 20:52:28

3

地圖是一對東西的集合,右(參賽作品)。因此,您可以遍歷條目,或僅遍歷鍵(map.keySet()),或遍歷該值(map.values())。你還想要什麼來迭代?

5

因爲從邏輯上講,地圖是一個集合集合的鍵值對 - 這是Map.Entry所代表的內容。迭代通常是針對集合的操作,而不是專門針對地圖。

不過,我經常在想,自己爲什麼Map沒有實現Iterable<Map.Entry<K,V>>等,並提供一個iterator()法在映射條目,而不是直接的需要入境集(它可能肯定還爲客戶提供全方位Set API 。

2

因爲Java沒有更好的語法來做到這一點。(您的可以改進)

這將是很好

for(String key, Integer val : map) 
    print(key, val); 

map.foreach (String key, Integer val) -> print(key, val); 

但是Java沒有這些。

+0

問題比語法更深。你不能使用舊式'for'循環或'while循環來做到這一點。 – 2011-03-25 06:48:00

相關問題