为什么我们不能在映射上使用迭代器(Java)?
我知道要遍历Map
,我需要使用entrySet()
方法,然后在结果Set
上使用Iterator
。我觉得这个问题可能有点傻,但是Map
是如何实现的,这样直接在它上面使用Iterator
就不可能了?据我所知,Map
不是一个集合,而Iterator
是用来覆盖集合的。但是从逻辑上讲,Map
不也是键值对的集合吗(尽管它没有实现Collection
接口)
你可以在下面搜索框中键入要查询的问题!
我知道要遍历Map
,我需要使用entrySet()
方法,然后在结果Set
上使用Iterator
。我觉得这个问题可能有点傻,但是Map
是如何实现的,这样直接在它上面使用Iterator
就不可能了?据我所知,Map
不是一个集合,而Iterator
是用来覆盖集合的。但是从逻辑上讲,Map
不也是键值对的集合吗(尽管它没有实现Collection
接口)
# 1 楼答案
好吧,你不能直接在地图上迭代,因为地图支持三种类型的迭代,而且没有明确的理由选择其中一种。做同样的
entrySet().iterator()
可能是合理的,但这不是我们做出的选择# 2 楼答案
集合实现了迭代器,映射虽然不属于
java.util.Collection
,但它仍然在集合框架中考虑这是我用来迭代地图的
# 3 楼答案
要迭代条目(键+值),还是只迭代键或值?这就是为什么要获取特定集合并获取迭代器
由于键/条目是唯一的(不存在重复的元素),因此可以通过
entrySet()
和keySet()
获得一个集合。由于值可以有重复项,所以可以通过values()
获取集合,然后从中获取迭代器# 4 楼答案
这取决于程序员想要迭代的值。要么只是键或值,要么两者都是。基于此,我们有三个可以迭代的不同对象。例如:
mapObject.keySet().iterator()
;或mapObject.values().iterator()
;或者mapObject.entrySet().iterator()
。唯一需要记住的是,当我们迭代values()
集合时,我们无论如何都不会得到相应的密钥