Iterable和Iterator区别
标签:Java基础

Iterable和Iterator区别

查看官方的API可见,实现它们两个都是接口。

实现 Iterable 是为了让对象可以变成 foreach 循环的目标。

实现 Iterator 是为了返回一个迭代器。

迭代器取代了之前的 Enumeration,它们之间存在下面的不同:

  1. 迭代器运行在调用者在迭代的时候可以一边迭代,一边进行删除操作,即提供了**remove**方法
  2. 方法名不同,在Enumeration中,是使用的 hasMoreElementsnextElement,而在Iterator,使用的 hasNextnext

官方说的是Iterator和Enumeration的功能是一样的,现在更推荐使用的是Iterator,这里多说一下的是:线程安全的Vector和Hashtable都是使用的Enumeration进行遍历的。


再来看Iterable和Iterator之间的关系,我们去看Iterable的继承关系:

可见,所有的Collection的子类都简介的继承了该接口,那么我们再继续看,比如在ArrayList:

可见一个类可以实现不同的迭代器,在于在我们覆盖Iterable的iterator的方法的时候,就可以选择不同的迭代器。

小结

看到这里应该知道了,Iterator主要是实现迭代器,提供了相关的方法,每个类都可以有不同的迭代方式来实现,而Iterable主要是返回一个迭代器,为什么不直接继承Iterator接口呢?因为那样的话,将会只能存在一种迭代方式

  • 2 min read

CONTRIBUTORS


  • 2 min read