28

谁能告诉我为什么HashMap不实现Iterable 接口的原因?

4

6 回答 6

31

坦率地说,Map一般(HashMap特别是)不实现Iterator,因为不清楚它应该迭代什么。有三种选择:

  • 钥匙
  • 价值观
  • 参赛作品

上述三个选择中没有一个看起来是完全不合理的:可以提出支持这些方法的论据。最后,库设计者决定不为您做出这个选择,让程序员明确选择要迭代的内容。

于 2013-10-17T09:10:46.550 回答
14

Map 没有实现它,但您可以使用keySet()or values()orentrySet()并且所有实现迭代器,因为它们是集合。请参阅此处的映射 javadoc

于 2013-10-17T09:09:19.327 回答
3

哈希映射包含两个数据结构,键和值,每个结构都有一个迭代器。HashMap 作为一个整体不是你应该迭代的数据结构。

于 2013-10-17T09:08:23.043 回答
3

不是直接的。您需要一个一维结构来迭代它。

hashMap.entrySet().iterator()将完成这项工作。

于 2013-10-17T09:10:42.070 回答
1

Map 接口没有实现 Collection 接口,因为它不包含元素,但包含键的条目及其对应的值。

于 2013-10-17T09:37:22.680 回答
0

Sun 可以让 Map 扩展 Iterable,但这需要 Map 本身应该有一个 iterator() 方法。想象一下所有会被破坏的自定义 Map 实现。他们用 java.sql 接口做的已经够糟糕了。

此外,您可以使用 keySet()、entrySet() 或 values() 来迭代地图——即 8、10 或 8 个额外字符。

于 2013-10-17T09:36:20.207 回答