为什么我们不能在Map(Java)上使用Iterator?

时间:2012-07-16 15:45:53

标签: java

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

4 个答案:

答案 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()集合时,就不会以任何方式获得各自的密钥。