为什么我们使用entrySet()方法并使用返回的集合来迭代映射?

发布于 2024-10-26 21:34:42 字数 268 浏览 3 评论 0 原文

通常我们编写此代码是为了从映射中获取键和值。

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());
}

为什么我们使用集合进行迭代而不直接映射?

Usually we write this to get the keys and values from a map.

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());
}

Why do we iterate using a set why not directly map?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

过期以后 2024-11-02 21:34:42

这与我们所能做到的最接近地迭代映射一样,因为您必须说明您是否只需要键、仅需要值或整个键/值条目。对于集合和列表,只有一个选项,因此无需使用单独的方法来执行此操作。

顺便说一句:这就是我迭代 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));

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.

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

In Java 8 you can write

m.forEach((k, v) -> System.out.println(k + ": " + v));
暮年 2024-11-02 21:34:42

因为从逻辑上讲,地图是键值对的 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 implement Iterable<Map.Entry<K,V>> et al and provide an iterator() method over the map entries directly instead of requiring an entry set (which it could certainly do also to provide a full Set API.

路还长,别太狂 2024-11-02 21:34:42

地图是成对事物的集合,对吧(条目)。因此,您可以迭代条目,或仅迭代键 (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?

迷鸟归林 2024-11-02 21:34:42

因为Java没有更好的语法来做到这一点。 (你的可以改进)

如果有的话就很好了

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

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

但是Java没有这些。

Because Java doesn't have a better syntax to do it. (Yours can be improved)

It would be nice to

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

or

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

but Java doesn't have these.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文