Java:迭代器

Sno*_*Mac 3 java oop iterator

所以我正在开发一个涉及两种数据类型的程序:链表和Arraylist.

链接的List Iterator如下所示:

private class NodeIterator implements Iterator<StudentIF> {
        private Node curr;

        public NodeIterator(Node head) {
            curr = head;
        }

        public void remove() { }

        public boolean hasNext() {
            if (curr == null)
                return false;
            return true;
        }

        public StudentIF next() {
            Node temp = curr;
            curr = curr.getNext();
            return temp.getData();
        }

    } // end class NodeIterator
Run Code Online (Sandbox Code Playgroud)

我调用ArrayList Iterator方法/类.

MyArrayListName.iterator();
Run Code Online (Sandbox Code Playgroud)

这是调用迭代器的方法:

public StudentIF getStudent(int id) {
    Iterator<StudentIF> xy = iterator();
    while (xy.hasNext()) {
        if (id == xy.next().getId()) {
            return xy.next();
        }
    }
    // Student doesn't exist
    return null;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是当我调用我的方法通过它们的id(实例变量)获取我的对象时,它总是抓取NEXT对象,而不是我想要的对象.如何使用链接列表和数组列表获取当前对象?

请帮我!

ins*_*ity 6

你使用该next()方法两次,这可能是原因.

试试这个

  while (xy.hasNext()) {
        StudentIF tmp = xy.next();
        if (id == tmp.getId()) {
            return tmp;
        }
Run Code Online (Sandbox Code Playgroud)

  • 您可能还想提及可以防止此问题的for(StudentIF student:xy)语法.好答案. (2认同)