为什么这么多方法使用Collection而不是Iterable?

时间:2011-05-11 11:24:06

标签: java iterable

使用C#,我逐渐喜欢IEnumerable<T>界面。在很多情况下,您只需要提供和接受。此外,它在.Net库中很有用。例如,List<T>类上的构造函数需要IEnumerable<T>

我现在必须使用Java,我自然希望使用等效的Iterable<T>接口。但是,它似乎并不像我可以在任何地方使用它。似乎所有东西都使用扩展的Collection<T>界面。为什么是这样?

例如,您有ArrayList<T>构造函数,它带有Collection<T>

  

按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

为什么不采用Iterable<T>呢?

3 个答案:

答案 0 :(得分:5)

Iterable仅在Java 5中添加。这意味着旧方法(大多数)使用集合。即使是可以采用Iterable的新方法也没有使用它。 :(

我认为问题在于大多数Iterable都是Collections。

答案 1 :(得分:2)

  

作为一个例子,你有一个ArrayList构造函数,它接受一个Collection

具有可预测的尺寸是好的,尤其是对于ArrayList(它确实使用toArray()来构建其底层Object [])

  

按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

可爱的太阳懒得再次更新文档,它根本不使用迭代器; 实际上我自己几乎从不读过文档,因为它们往往是误导或者只是错误。

你也可以通过继承AbstractCollection(它只缺少size()和iterator()很容易实现)来轻松地将Iterable放入Collection中。

Iterable主要用于符合foreach构造。

答案 2 :(得分:0)

因为他们希望允许对集合做更多的事情,而不仅仅是迭代它?