如何写一个正确的iterator

158次

问题描述:

该如何写?

推荐答案

2023-10-24 17:29:26

首先,考虑编写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;

知道问答相关问答

(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6