Reason HashMap没有实现Iterable接口?

时间:2013-10-17 09:05:09

标签: java collections

有人可以告诉我HashMap未实施Iterable 界面的原因吗?

6 个答案:

答案 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个额外字符。