3

我知道要遍历 a Map,我需要使用该entrySet()方法,然后Iterator在结果上使用Set。我觉得这个问题可能很愚蠢,但是,究竟是如何Map实现的Iterator,所以直接使用它是不可能的?据我了解,Map它不是一个集合,Iterator而是用于集合。但从逻辑上讲,不Map也是键值对的集合吗(虽然它没有实现Collection接口)?

4

4 回答 4

9

AFAIK,您不能直接迭代 Map,因为 Map 支持三种类型的迭代,并且没有明确的理由选择其中一种。做同样entrySet().iterator()的事情可能是合理的,但这不是做出的选择。

于 2012-07-16T15:49:23.297 回答
7

您要迭代条目(键+值)还是仅迭代键或仅迭代值?这就是您获取特定集合并获取迭代器的原因。

由于键/条目是唯一的(不存在重复的元素),因此您可以通过entrySet()and获得一个集合keySet()。而且由于值可以有重复项,因此您可以通过获取集合values(),然后从中获取迭代器。

于 2012-07-16T15:47:52.417 回答
4

Collection 实现了 Iterator,Map 虽然不属于 java.util.Collection,但仍然在 Collection 框架中考虑。

这就是我用来迭代地图的方法

for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
于 2012-07-16T15:52:10.737 回答
0

这取决于程序员寻求迭代的价值。要么只是键或值,要么两者兼而有之。基于此,我们可以迭代三个不同的对象。示例:mapObject.keySet().iterator(); 或mapObject.values().iterator();或mapObject.entrySet().iterator()。唯一要记住的是,当我们遍历values()集合时,我们不会以任何方式获得相应的键。

于 2020-06-25T14:22:49.970 回答