[quote]以下的代码都是使用JDK1.7发[/quote]
超类Collection 继承了一个Iterable接口,从名字的意思来看是"是否可以迭代",从API上介绍来看:
顾名思义, Iterable的作用来返回一个Collection具体实现子类的迭代器.
这个接口中只声明了一个方法体, 就是iterator, 从图上就可以看出来具体实现类需要去实现这个方法, 然后返回一个Iterator接口的具体实现类. 初学的感觉是, 如果某个类是可以进行迭代的(实现了Iterable接口), 那么这个类应该就会有对应的迭代类(实现了Iterator接口)
[ 小小思路(1. Iterator为什么是个接口, 不是个具体类? 2. 接口和类啥区别)
1. 由于每个具体的实现类都是有不同的数据结构, 那么它们的具体储存, 遍历都是有不同的方式的是不同的, 我自己想的是, 如果Iterator是个具体的类, 那么它里面的方法体的形参要么是Object, 要么就使用泛型来接受. 这样子才能可以区分每个不同的数据结构的容器.
而通过观察ArrayList的具体实现, 对于迭代功能的具体实现是在ArrayList中用一个私有的内部类去实现Iterator接口, 然后在这个私有内部类中, 对Iterator接口声明的方法进行具体实现. 这样子通过内部类的形式就可以实现每个数据结构各自的迭代器.
恩, 对于菜鸟的我, 这种私有内部类的使用, 还有接口的使用时非常有意义的!
超类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);
}
恩, 对于菜鸟的我, 这种私有内部类的使用, 还有接口的使用时非常有意义的!