为了账号安全,请及时绑定邮箱和手机立即绑定

为什么迭代器方法同时存在于Iterable和Collection接口中?

为什么迭代器方法同时存在于Iterable和Collection接口中?

桃花长相依 2021-05-05 10:58:20
该Iterable接口具有以下方法: Iterator<T> iterator();该Collection接口扩展Iterable,同时也宣布了同样的方法。我怀疑在设计Java集合时需要两次将相同的方法声明放入两次吗?
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

主要原因是Java 5。

java.util.Collectioniterator()方法和java.util.Iterator自Java 1.2的存在。

当他们想在Java 5中引入增强的for循环时(一种方法for (String s: ...) {},他们需要一种java.util.Iterator从未实现的类创建a的方法java.util.Collection。决定引入一个新的接口java.lang.Iterable,该接口可以由所有希望支持的类实现。增强的for循环。

为了使现有的java.util.Collection及其所有后代接口和类与增强的for循环兼容,它们进行了java.util.Collectionextend java.lang.Iterable

因此,这两个接口都有一个方法iterator()-java.util.Collection因为它是“第一个诞生的”,java.lang.Iterable用于支持增强的for循环。


查看完整回答
反对 回复 2021-05-19
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

重新定义接口方法是一种常见的做法,它允许子接口完善由超级接口定义的协定。

Iterableiterator()返回在某种类型的元素上的迭代器。

Collection的会iterator()在的元素上返回一个迭代器Collection,而无需保证顺序。

Listiterator()回报过的元件进行迭代的迭代List以正确顺序。

这意味着,如果你执行的是iterator()一些类的实现方法Collection,你应该遵循合同Collectioniterator(),这比更具体Iterableiterator()合同。如果您的类还实现了List,你应该遵循的更加具体的合同Listiterator()


查看完整回答
反对 回复 2021-05-19
  • 3 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信