初学迭代器

[quote]以下的代码都是使用JDK1.7发[/quote]
​超类Collection 继承了一个Iterable接口,从名字的意思来看是"是否可以迭代",从API上介绍来看:

public abstract interface Iterable<T>
{
public abstract Iterator<T> iterator();
}

顾名思义, Iterable的作用来返回一个Collection具体实现子类的迭代器.

这个接口中只声明了一个方法体, 就是iterator, 从图上就可以看出来具体实现类需要去实现这个方法, 然后返回一个Iterator接口的具体实现类. 初学的感觉是, 如果某个类是可以进行迭代的(实现了Iterable接口), 那么这个类应该就会有对应的迭代类(实现了Iterator接口)

[ 小小思路(1. Iterator为什么是个接口, 不是个具体类? 2. 接口和类啥区别)

1. 由于每个具体的实现类都是有不同的数据结构, 那么它们的具体储存, 遍历都是有不同的方式的是不同的, 我自己想的是, 如果Iterator是个具体的类, 那么它里面的方法体的形参要么是Object, 要么就使用泛型来接受. 这样子才能可以区分每个不同的数据结构的容器.

而通过观察ArrayList的具体实现, 对于迭代功能的具体实现是在ArrayList中用一个私有的内部类去实现Iterator接口, 然后在这个私有内部类中, 对Iterator接口​声明的方法进行具体实现. 这样子通过内部类的形式就可以实现每个数据结构各自的迭代器.

public Iterator<E> iterator()
{
return new Itr(null);
}

恩, 对于菜鸟的我, 这种私有内部类的使用, 还有接口的使用时非常有意义的!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值