将迭代器指向对象Java?

时间:2013-09-07 01:18:16

标签: java iterator

我在解决这个问题时遇到了一些麻烦,可能是因为我上次在C ++中做过这种事情并且它略有不同但我遇到了以下问题。

我必须编写一个自定义的ArrayList类和一个关联的Iterator。我已经实现了基本的类结构,如下所示:

public class MyArrayList<T> implements Iterable<T> {

protected T[] array;
private MyIterator<T> itr = new MyIterator<T>();

public MyArrayList() {
    array = (T[]) new Object[10];
}

public MyArrayList(int i) {
    array = (T[]) new Object[i];
}

@Override
public Iterator<T> iterator() {
    return itr;
}

private class MyIterator<T> implements Iterator<T> {

    @Override
    public void remove() {

    }

    @Override
    public T next() {
        return null;
    }

    @Override
    public boolean hasNext() {
        return true;
    }
}

}

显然我还在添加代码,但我刚刚实现了现在需要的东西来摆脱所有错误消息。我现在要做的是将名为itr的迭代器链接到列表构造函数中数组的第一个元素。

就像在带有指针的C ++中一样,我需要将迭代器指向我集合中的第一个项目,迭代器的整个想法是它知道它的当前位置但是我不确定我是否必须明确告诉它在哪里开始?希望这是有道理的谢谢。

1 个答案:

答案 0 :(得分:1)

您需要在 MyIterator内声明MyArrayList。结果是,当创建MyIterator的实例时,它将与<{1}}类的实例关联,并且它将能够访问该成员MyArrayList(包括私人会员)。这样,您的迭代器将能够访问MyArrayList以及您为当前长度定义的任何变量。

正如Josh所说,array应该使用itr而不是声明iterator()变量。新的new MyIterator对象会自动与调用MyIterator的同一MyArrayList对象相关联(有一种语法可以将其与不同的new MyIterator相关联,但您不需要它在这里,我想)。在MyArrayList内,这些方法可以访问MyIterator和其他array字段。 MyArrayList的构造函数将负责所需的初始化;你可能想要MyIterator中的某种“当前索引”字段,构造函数会初始化它。

有关嵌套类的更多信息:http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html