我在解决这个问题时遇到了一些麻烦,可能是因为我上次在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 ++中一样,我需要将迭代器指向我集合中的第一个项目,迭代器的整个想法是它知道它的当前位置但是我不确定我是否必须明确告诉它在哪里开始?希望这是有道理的谢谢。
答案 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。