迭代器(Iterator)与 ListIterator 的使用

目录

一. Iterator 接口

例子:

二. ListIterator 接口

三. Iterable 接口

例子:

四. List 接口

五. Iterable接口 与 Iterator 接口 在 ArrayList 中 的使用

六. List 接口 与 ListIterator 接口 在 ArrayList 中 的使用 


一. Iterator 接口

Iterator 接口 又叫迭代器。里面有两个抽象方法。

实现Iterator接口,必须重写这两个抽象方法。

例子:

那么,一个类A实现了Iterator接口,并重写了hasNext()和next()这两个抽象方法。Iterator a = new A(); 发生了向上转型,则,a这个Iterator类型的引用调用hasNext()和next()这两个方法,调用的是重写的。

二. ListIterator 接口

ListIterator 接口,继承 Iterator 接口,继承了hasNext(),next(),等抽象方法。当然也有自己新增的抽象方法。

实现ListIterator接口,必须重写所有的抽象方法。

三. Iterable 接口

Iterable 接口,里面有一个抽象方法iterator(),这个抽象方法的返回值类型是一个接口类型(Iterator接口),返回的是一个Iterator接口类型的对象(很大可能发生了向上转型,由原来的子类类型向上转型为父接口Iterator接口类型),即返回一个迭代器对象。

实现Iterable接口,必须重写这个抽象方法,调用iterator方法会返回一个Iterator接口类型的对象。

例子:

那么,一个类A实现了Iterable接口,并重写了iterator()这个抽象方法。类B实现了Iterator接口,重写了抽象方法hasNext()和next()。

A a = new A();则,a这个引用就可以调用iterator()这个方法。调用这个iterator方法会返回一个Iterator接口类型的对象new B()( B类型向上转型为 Iterator接口类型)。Iterator it = a.iterator(); 用引用 it 接收了,it这个Iterator类型的引用就可以调用Iterator接口中的方法,特别的,因为子类B重写了 父接口 Iterator中的hasNext()和next()方法,所以调用这些方法时调用的是重写的。(因为发生向上转型时,父类/父接口类型的引用可以访问它们特有的方法,以及子类重写的方法)

如下:

四. List 接口

List接口,里面有一个抽象方法 listIterator(),这个抽象方法的返回值类型是 ListIterator ,(这里大概率会发生向上转型,由子类类型转变为父接口 ListIterator类型)

实现List接口,必须重写所有的抽象方法,当然包括 listIterayor()这个抽象方法,调用 listIterator 方法会返回一个 ListIterator 类型的对象。

五. Iterable接口 与 Iterator 接口 在 ArrayList 中 的使用

Iterable 接口中有抽象方法 iterator()

 

对于ArrayList集合类来说,ArrayList类实现了Iterable接口,并且重写了接口中的iterator抽象方法。

那么ArrayList类型的引用就可以调用  iterator方法 ,会返回  new Itr()这个对象(返回值类型是Iterator,所以这里发生了向上转型,Itr类型向上转型为Iterator类型),用 Iterator类型的引用 it 接收,it这个Iterator类型的引用就可以调用Iterator接口中的方法,特别的,因为子类Itr 重写了 父接口 Iterator中的hasNext()和next()等方法,所以调用这些方法时调用的是重写的。(因为发生向上转型时,父类/父接口类型的引用可以访问它们特有的方法,以及子类重写的方法)

如下,就完成了ArrayList的遍历:

六. List 接口 与 ListIterator 接口 在 ArrayList 中 的使用 

List接口中有抽象方法  listIterator()

对于ArrayList集合类来说,ArrayList类实现了List接口,并且重写了接口中的listIterator抽象方法。

那么ArrayList类型的引用就可以调用  listIterator方法 ,会返回  new ListItr()这个对象(返回值类型是ListIterator,所以这里发生了向上转型,ListItr类型向上转型为 ListIterator 类型),用 ListIterator 类型的引用 lt 接收,lt这个ListIterator类型的引用就可以调用ListIterator接口中的方法,(因为ListIterator 接口 继承 Iterator 接口,所以ListIterator 接口中也有hasNext等抽象方法)特别的,因为 Itr中重写了 hasNext()和next()等方法,而 ListItr 继承 Itr,所以ListItr 中 也该有重写的hasNext()和next()等方法,所以调用这些方法时调用的是重写的。(因为发生向上转型时,父接口类型的引用,访问的是子类中重写的方法)

如下,就完成了ArrayList的遍历:

 还可以这样写:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值