Skip to content

Commit 4682088

Browse files
committed
迭代器模式
1 parent cdef777 commit 4682088

File tree

6 files changed

+122
-0
lines changed

6 files changed

+122
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
packagecom.anxpp.designpattern.iterator;
2+
//方便演示而实现的简陋的数组list
3+
publicclassArrayList<T> implementsList<T>{
4+
privateintsize; //存放的元素个数,会默认初始化为0
5+
privateObject[] defaultList; //使用数组存放元素
6+
privatestaticfinalintdefaultLength = 10;//默认长度
7+
publicArrayList(){//默认构造函数
8+
defaultList = newObject[defaultLength];
9+
}
10+
@Override
11+
publicIterator<T> iterator(){
12+
returnnewMyIterator();
13+
}
14+
//添加元素
15+
@Override
16+
publicbooleanadd(Tt){
17+
if(size<=defaultLength){
18+
defaultList[size++] = t;
19+
returntrue;
20+
}
21+
returnfalse;
22+
}
23+
//遍历器
24+
privateclassMyIteratorimplementsIterator<T>{
25+
privateintnext;
26+
@Override
27+
publicbooleanhasNext(){
28+
returnnext<size;
29+
}
30+
@SuppressWarnings("unchecked")
31+
@Override
32+
publicTnext(){
33+
return (T) defaultList[next++];
34+
}
35+
}
36+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
packagecom.anxpp.designpattern.iterator;
2+
3+
//只是需要遍历一堆数据,那么只需要2个方法就可以了
4+
publicinterfaceIterator<T>{
5+
booleanhasNext(); //是否还有下一个元素
6+
Tnext(); //得到下一个元素
7+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
packagecom.anxpp.designpattern.iterator;
2+
//方便演示而实现的简陋的单向链表list
3+
publicclassLinkList<T> implementsList<T>{
4+
privateintsize; //存放的元素个数,会默认初始化为0
5+
privateNode<T> first; //首节点,默认初始化为null
6+
@Override
7+
publicIterator<T> iterator(){
8+
returnnewMyIterator();
9+
}
10+
@Override
11+
publicbooleanadd(Tt){
12+
if(size==0){
13+
first = newNode<T>(t,null);
14+
}
15+
while(first.next!=null);
16+
first.next = newNode<T>(t,null);
17+
returntrue;
18+
}
19+
//链表节点
20+
privatestaticclassNode<T>{
21+
Tdata;
22+
Node<T> next;
23+
Node(Tdata,Node<T> next){
24+
this.data = data;
25+
this.next = next;
26+
}
27+
}
28+
//遍历器
29+
privateclassMyIteratorimplementsIterator<T>{
30+
privateNode<T> next; //下一个节点
31+
MyIterator(){
32+
next = first;
33+
}
34+
@Override
35+
publicbooleanhasNext(){
36+
returnnext!=null;
37+
}
38+
@Override
39+
publicTnext(){
40+
Tdata = next.data;
41+
next = next.next;
42+
returndata;
43+
}
44+
}
45+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
packagecom.anxpp.designpattern.iterator;
2+
3+
//便于介绍,不做多的操作
4+
publicinterfaceList<T>{
5+
Iterator<T> iterator(); //返回一个遍历器
6+
booleanadd(Tt); //添加元素到列表
7+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
packagecom.anxpp.designpattern.iterator;
2+
publicclassTestUse{
3+
publicstaticvoidmain(Stringargs[]){
4+
//分别定义两种结构
5+
List<Integer> array = newArrayList<Integer>();
6+
List<Integer> link = newLinkList<Integer>();
7+
//添加数据
8+
for(inti = 1;i < 8; i++){
9+
array.add(i);
10+
link.add(i);
11+
}
12+
//获得迭代器
13+
Iterator<Integer> ai = array.iterator();
14+
Iterator<Integer> li = array.iterator();
15+
//遍历并输出
16+
while(ai.hasNext())
17+
System.out.print(ai.next());
18+
System.out.println();
19+
while(li.hasNext())
20+
System.out.print(li.next());
21+
}
22+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/**
2+
* @author Administrator
3+
* 迭代器模式--此处未实现remove()方法
4+
*/
5+
packagecom.anxpp.designpattern.iterator;

0 commit comments

Comments
(0)