通常我们写这个来获取地图中的键和值。
Map m=new HashMap();
Set s=map.entrySet();
Iterator i=s.iterator()
while(s.hasNext()){
Map.Entry m= (map.Entry) s.next();
System.out.println(""+m.getKey()+""+ m.getValue());
}
为什么我们使用集合迭代为什么不直接映射?
答案 0 :(得分:26)
这就像我们可以在地图上迭代一样接近,因为你必须说明你是否只需要键,只需要值或整个键/值条目。对于集合和列表,只有一个选项,因此不需要单独的方法来执行此操作。
BTW:这是我迭代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));
答案 1 :(得分:5)
因为从逻辑上讲,地图是键值对的Set 集合 - 这是Map.Entry所代表的。迭代通常是对集合的操作,而不是具体的映射。
但是,我经常想知道为什么Map
没有实现Iterable<Map.Entry<K,V>>
等并直接在地图条目上提供iterator()
方法而不需要输入集(它当然也可以提供完整的Set
API。
答案 2 :(得分:3)
地图是成对事物的集合,对(条目)。因此,您可以迭代条目,或仅迭代键(map.keySet()),或仅遍历值(map.values())。您还希望能够迭代什么?
答案 3 :(得分:2)
因为Java没有更好的语法来执行它。 (你的可以改进)
很高兴
for(String key, Integer val : map)
print(key, val);
或
map.foreach (String key, Integer val) -> print(key, val);
但Java没有这些。