java - 将迭代器指向 Java 对象?

标签 java iterator

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

最佳答案

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

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

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

关于java - 将迭代器指向 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668714/

相关文章:

java - 我怎样才能在同一个方法中调用一个方法?

java - 对所有用户输入进行编码以防止 rXSS

Java:继承与依赖注入(inject) "Autowired"

string - 获取句子中单词的第一个字母

java - 如何获取hashmap对象值

java - getLargePrime Java 循环

java - 如何将 Idea 模块添加到 gradle 的依赖项中

c++ - 用 C++ 简化多项式中的项

java - 使用递归通过迭代器查找字符串的排列

c++ - 如何在模板中定义迭代器?