谁能告诉我为什么HashMap
不实现Iterable
接口的原因?
问问题
12832 次
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 回答