有人可以告诉我HashMap
未实施Iterable
界面的原因吗?
答案 0 :(得分:26)
说实话,一般Map
(特别是HashMap
)不会实现Iterator
,因为不清楚它应该迭代什么。有三种选择:
上述三个选择中没有一个看起来完全不合理:可以支持这些方法中的每一个。最后,图书馆设计师决定不为你做出这个选择,让程序员选择明确迭代的内容。
答案 1 :(得分:10)
Map没有实现它,但您可以使用keySet()
或values()
或entrySet()
,并且所有实现迭代器都是集合。请参见映射javadoc here
答案 2 :(得分:3)
哈希映射包含两个数据结构,键和值,每个都有一个迭代器。 HashMap作为一个整体不是你应该迭代的数据结构。
答案 3 :(得分:2)
不直接。您需要一维结构来迭代它。
hashMap.entrySet().iterator()
将完成这项工作。
答案 4 :(得分:1)
Map接口没有实现Collection接口,因为它不包含元素,但包含键的条目及其对应的值。
答案 5 :(得分:0)
Sun可能会使Map扩展Iterable,但这需要Map本身应该有一个iterator()方法。想象一下所有可能被破坏的自定义Map实现。他们用java.sql接口做的很糟糕。
此外,您可以使用keySet(),entrySet()或values()来迭代地图 - 这是8个,10个或8个额外字符。