我了解要迭代Map
,我需要使用entrySet()
方法,然后在结果Iterator
上使用Set
。我觉得这个问题可能很愚蠢,但Map
如何完全实现,以便直接使用Iterator
是不可能的?据我所知,Map
不是集合,而Iterator
是用于集合的。但从逻辑上讲,Map
也不是键值对的集合(虽然它没有实现Collection
接口)?
答案 0 :(得分:7)
AFAIK,您无法直接迭代Map,因为Map支持三种类型的迭代,并且没有明确的理由选择其中一种。做同等的entrySet().iterator()
可能是合理的,但这不是做出的选择。
答案 1 :(得分:6)
您想迭代条目(键+值)还是仅键或仅值?这就是你获得特定集合并获得迭代器的原因。
由于键/条目是唯一的(不存在重复元素),因此您可以通过entrySet()
和keySet()
获取一组。由于值可以有重复项,因此您可以通过values()
获取集合,然后从这些集合中获取迭代器。
答案 2 :(得分:3)
Collection实现了Iterator,而Map虽然不属于 java.util.Collection
,但它仍然在Collection框架中考虑过。
这是我用来迭代Map
的for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
答案 3 :(得分:0)
这取决于程序员寻求迭代的值。要么只是键,要么是值,或者两者都是。基于此,我们可以迭代三个不同的对象。示例:mapObject.keySet().iterator()
;或mapObject.values().iterator()
;或mapObject.entrySet().iterator()
。唯一要记住的是,当我们仅迭代values()
集合时,就不会以任何方式获得各自的密钥。