迭代器遍历的实现
为了方便理解,我们把所有要用到的知识点罗列下来:
Collection接口:所有单列集合的祖宗接口,我们今天学习其三种通用遍历方式之一的迭代器遍历。
Collections类:接口+工具类设计,配合Collection接口下的集合使用。
Iterable接口:Collection接口的超接口。声明了iterator方法。
- iterator方法:Iterator<T> iterator()返回一个在一组T类型元素上进行迭代的迭代器。
Iterator接口:声明了hasNext()方法,next方法。
-
hasNext方法:boolean hasNext()如果仍有元素可以迭代,返回true。
-
next方法:E next()返回迭代的下一个元素。
注意:接口中的方法都是抽象方法,想要实现需要重写!
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
//迭代器遍历
public class Collection01 {
public static void main(String[] args) {
//向上转型,面向Collection接口创建ArrayList集合
Collection<String> coll = new ArrayList<>();
//利用Collections类的addAll静态方法添加元素
Collections.addAll(coll, "aaa", "bbb", "ccc", "ddd");
//面向Iterator接口创建迭代器对象it
//调用ArrayList类中的iterator方法(重写Iterable接口中的抽象方法)见图一
Iterator<String> it = coll.iterator();
//利用实现了Iterator接口的内部类中的方法去迭代集合元素
while(it.hasNext()) {
String str = it.next();
System.out.println(str);
}
}
}
图一
在ArrayList类中,重写了iterator方法,返回一个内部类对象,该类实现了Iterator接口,重写了迭代器遍历用到的方法。
可能的疑问:接口不是不能实例化吗?为什么可以Iteratorr<String> it = coll.iterator();呢?
解答:用接口类型声明一个变量不等于实例化接口。
## 工厂模式的理解
工厂模式介绍:工厂指ArrayList类;工厂方法指iterator()方法,产品指Itr内部类。
仔细回想创建集合时,我故意用了向上转型,这是为了当问题变成其他集合类,相当于只是更换了工厂,内部都有自己对Iterator接口的实现。
所以coll.iterator()是一个标准的工厂模式的应用。
如果这篇文章起到作用,还请点赞收藏加关注😘