所有栏目

如何写一个正确的iterator

已输入 0 字
优质回答
  • 首先,考虑编写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;

    2023-10-24 17:29:26
最新问题 全部问题