首先,考虑编写iterator,我们需要基于哪几个方面的考虑:
由于迭代器会访问List的私有域,因此,可以有2种方式:
一种的改变List的域的可见性,让其变成public或friendly(默认的可见性,即包可见性)的,不过这违反了良好的面向对象编程的羁绊原则,它要求数据尽可能的隐蔽。
另外一种是为List添加一个内部类或者嵌套类,然后我们来看这2种类的区别。
首先我们需要先理解一下2种类的概念:
将一个类放入另一个类的内部,当这个类是static的,表示嵌套类,否则这个类就是内部类。
1,嵌套类
嵌套类是外部类的一部分,所以可以访问外部类,特性:
嵌套类访问外部类:
不能直接访问外部类的非静态成员
只能直接访问外部类的静态成员
外部类访问嵌套类:
外部类可以访问嵌套类的私有成员 和公有成员
so this is 代码实现:
复制代码
private static class MyIterator<T>{
MyList<T> list ;
int iteratorIndex = 0;
publicMyIterator(MyList<T> myList){
list = myList;
}
publicboolean hasNext(){
return list.length>iteratorIndex;
}
public T next(){
return list.arrays[iteratorIndex++];
}
publicvoid remvoe(){
list.remove(iteratorIndex--);
}
}
复制代码
2,内部类
当声明一个内部类时,编译器会添加对外部类的一个隐式引用,该对象引起内部类对象的构造。
如果外部类的名字是Outer,则隐式引用就是Outer.this。
实现:
复制代码
private class MyIterator<T>{
int iteratorIndex = 0;