有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么我们不能在映射上使用迭代器(Java)?

我知道要遍历Map,我需要使用entrySet()方法,然后在结果Set上使用Iterator。我觉得这个问题可能有点傻,但是Map是如何实现的,这样直接在它上面使用Iterator就不可能了?据我所知,Map不是一个集合,而Iterator是用来覆盖集合的。但是从逻辑上讲,Map不也是键值对的集合吗(尽管它没有实现Collection接口)


共 (4) 个答案

  1. # 1 楼答案

    好吧,你不能直接在地图上迭代,因为地图支持三种类型的迭代,而且没有明确的理由选择其中一种。做同样的entrySet().iterator()可能是合理的,但这不是我们做出的选择

  2. # 2 楼答案

    集合实现了迭代器,映射虽然不属于java.util.Collection,但它仍然在集合框架中考虑

    这是我用来迭代地图的

    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
        System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
    }
    
  3. # 3 楼答案

    要迭代条目(键+值),还是只迭代键或值?这就是为什么要获取特定集合并获取迭代器

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

  4. # 4 楼答案

    这取决于程序员想要迭代的值。要么只是键或值,要么两者都是。基于此,我们有三个可以迭代的不同对象。例如:mapObject.keySet().iterator();或mapObject.values().iterator();或者mapObject.entrySet().iterator()。唯一需要记住的是,当我们迭代values()集合时,我们无论如何都不会得到相应的密钥