0

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

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

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++ 中一样,我是否需要将迭代器指向集合中的第一项,迭代器的整个想法是它知道它是当前位置,但我不确定是否必须明确告诉它从哪里开始?希望这是有道理的谢谢。

4

1 回答 1

1

你需要在里面MyIterator声明这个类。效果是,当一个实例被创建时,它会与该类的一个实例相关联,并且它能够访问该类的成员(包括私有成员)。这样,您的迭代器将能够访问您为当前长度定义的任何变量。 MyArrayListMyIteratorMyArrayListMyArrayListarray

正如 Josh 所说,itr应该iterator()使用new MyIterator. 新MyIterator对象将自动与MyArrayList调用的同一个对象关联new MyIterator(有一种将其与不同对象关联的语法,MyArrayList但我认为您在这里不需要它)。在里面MyIterator,方法将能够访问array和其他MyArrayList字段。的构造函数MyIterator将负责所需的任何初始化;您可能需要 in 中的某种“当前索引”字段MyIterator,并且构造函数将对其进行初始化。

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

于 2013-09-07T01:34:16.693 回答