为什么我们使用entrySet()方法并使用返回的集合来迭代映射?
通常我们编写此代码是为了从映射中获取键和值。
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());
}
为什么我们使用集合进行迭代而不直接映射?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这与我们所能做到的最接近地迭代映射一样,因为您必须说明您是否只需要键、仅需要值或整个键/值条目。对于集合和列表,只有一个选项,因此无需使用单独的方法来执行此操作。
顺便说一句:这就是我迭代 Map 的方式。请注意泛型、for-each 循环和 LinkedHashMap 的使用,以便条目以某种逻辑顺序出现。 TreeMap 将是另一个不错的选择。
在 Java 8 中你可以这样写
This is as close to iterating over the map as we can because you have to say whether you want just the keys, just the values or the whole key/value entry. For Sets and Lists, there is only one option so, no need to have a separate method to do this.
BTW: This is how I would iterate over a Map. Note the use of generics, the for-each loop and the LinkedHashMap so the entries appear in some kind of logical order. TreeMap would be another good choice.
In Java 8 you can write
因为从逻辑上讲,地图是键值对的 Set集合 - 这就是 Map.Entry 所代表的内容。迭代通常是对集合的操作,而不是专门针对映射的操作。
然而,我经常想知道为什么
Map
不实现Iterable>
等并提供iterator( )
方法直接覆盖地图条目,而不需要条目集(它当然也可以提供完整的Set
API。Because, logically, a map is a Set collection of key-value pairs - which is what a Map.Entry represents. Iteration is an operation on a collection generally, not a map specifically.
However, I've often wondered myself why
Map
doesn't implementIterable<Map.Entry<K,V>>
et al and provide aniterator()
method over the map entries directly instead of requiring an entry set (which it could certainly do also to provide a fullSet
API.地图是成对事物的集合,对吧(条目)。因此,您可以迭代条目,或仅迭代键 (map.keySet()),或仅迭代值 (map.values())。您还希望能够迭代什么?
Map is a collection of pairs of things, right (Entries). So you can iterate over entries, or iterate over the keys only (map.keySet()), or over the value only (map.values()). What else do you want to be able to iterate over?
因为Java没有更好的语法来做到这一点。 (你的可以改进)
如果有的话就很好了
,
但是Java没有这些。
Because Java doesn't have a better syntax to do it. (Yours can be improved)
It would be nice to
or
but Java doesn't have these.