若是我有一個用Java實現Map
接口的對象,而且但願對其中包含的每一對進行迭代,那麼遍歷該映射的最有效方法是什麼? java
元素的順序是否取決於我對接口的特定映射實現? git
public class abcd{ public static void main(String[] args) { Map<Integer, String> testMap = new HashMap<Integer, String>(); testMap.put(10, "a"); testMap.put(20, "b"); testMap.put(30, "c"); testMap.put(40, "d"); for (Integer key:testMap.keySet()) { String value=testMap.get(key); System.out.println(value); } } }
要麼 github
public class abcd { public static void main(String[] args) { Map<Integer, String> testMap = new HashMap<Integer, String>(); testMap.put(10, "a"); testMap.put(20, "b"); testMap.put(30, "c"); testMap.put(40, "d"); for (Entry<Integer, String> entry : testMap.entrySet()) { Integer key=entry.getKey(); String value=entry.getValue(); } } }
使用迭代器和泛型的示例: api
Iterator<Map.Entry<String, String>> entries = myMap.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<String, String> entry = entries.next(); String key = entry.getKey(); String value = entry.getValue(); // ... }
對於Eclipse Collections (之前稱爲GS Collections ),您將在MapIterable接口上使用forEachKeyValue方法,該方法由MutableMap和ImmutableMap接口及其實現繼承。 eclipse
final MutableBag<String> result = Bags.mutable.empty(); MutableMap<Integer, String> map = Maps.mutable.of(1, "One", 2, "Two", 3, "Three"); map.forEachKeyValue(new Procedure2<Integer, String>() { public void value(Integer key, String value) { result.add(key + value); } }); Assert.assertEquals(Bags.mutable.of("1One", "2Two", "3Three"), result);
使用Java 8 lambda語法,能夠編寫以下代碼: spa
MutableBag<String> result = Bags.mutable.empty(); MutableMap<Integer, String> map = Maps.mutable.of(1, "One", 2, "Two", 3, "Three"); map.forEachKeyValue((key, value) -> result.add(key + value)); Assert.assertEquals(Bags.mutable.of("1One", "2Two", "3Three"), result);
注意:我是Eclipse Collections的提交者。 code
是的,由於許多人都認爲這是迭代Map
的最佳方法。 對象
可是若是地圖爲null
就有機會拋出nullpointerexception
。 不要忘記輸入null
.check。 繼承
| | - - - - | | for (Map.Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); }
您能夠使用泛型來實現: 接口
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<Integer, Integer> entry = entries.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); }