freehell

Iterator设计模式

测试类:TestArrayList.java 目标:
实现一个动态数组,可以向里面加元素,可以返回该动态数组的长度
模拟JDK中的ArrayList,实现其原型
熟悉Iterator设计思想

 

示例代码:
DynamicArray.java

 

以上就是一种动态数组的基本实现类,如果存放元素的数量超出了数组的容量,该对象数组会自动扩容。

 示例代码:java.util.ArrayList类的简单实现
ArrayList.java

 

迭代器标准:
Iterator.java

 

 

Assistant Class
Apple.java

 

  

测试类:TestArrayList.java

分析:
在JDK中java.util包中所有的容器都是直接或间接从Collection继承,也就是说都是Collection的子类,既然这样Collection就必须在遍历这些子类上进行统一,如果不能进行统一此Collection设计的就有失水准,要想统一这些容器,如果单单通过某一个类来完成不太现实,因为具体到某一种容器它的底层实现都是各不相同的,既然每种容器没有统一的实现,要想在一个类中完成对所有容器的遍历不太现实了,所以反过来,每种容器都有自己的底层实现方式,到底该如何遍历它们,只有容器只身知道,所以具体的遍历方式也要有容器自身来完成;所以就统一出了一个Iterator接口,只要容器实现了该接口定义的规范,到底该怎样遍历,容器自己说了算,此时拿到容器对象返回的Iterator对象就可以对每种容器进行遍历了,也就实现了统一遍历每种容器的思想,也是Collocion的初衷。

 

JDK中的java.util.LinkedList.java实现
示例代码:LinkedList.java

LinkedList底层实现是链表,同样实现了Iterator接口,可以调用Iterator()方法得到迭代器对象,对其进行迭代操作。


总结:
每种容器由于地层实现的不同,迭代它们的方式肯定是不同,所以就不可能使用某一个类来统一这样的迭代操作,而所有容器的父类都是Collection,对于Collection容器来说就必须统一这样的操作,怎样统一,如何统一的问题就必须被解决,为此统一出了一个单独的接口Iterator,所有容器实现此接口,并且返回一个Iterator对象,就可以对其进行遍历。
对于通过每种容器的iterator方法得到的Iterator对象,在每种Iterator对象眼里容器就是一个Iterator对象,而这作为遍历每种容器来说已经足够了。

熟悉并理解Iterator的实现原理和设计思想。

posted on 2010-10-24 18:51  freehell  阅读(228)  评论(0编辑  收藏  举报

导航