Java 对于LinkedList中ListIterator的add()方法感到困惑

Java 对于LinkedList中ListIterator的add()方法感到困惑,java,linked-list,Java,Linked List,我正在一所大学里学习LinkedList的实用程序。 我很难理解迭代器遍历LinkedList的add()方法。我们的讲师为我们提供了实现这一点的代码,因此完全从他那里复制: public class LinkedList { public LinkedList() { Node first = null; } class Node { public Object data; public Node next; }

我正在一所大学里学习LinkedList的实用程序。 我很难理解迭代器遍历LinkedList的add()方法。我们的讲师为我们提供了实现这一点的代码,因此完全从他那里复制:

public class LinkedList
{
    public LinkedList() {
        Node first = null;
    }

    class Node {
        public Object data;
        public Node next;
    }  

    class LinkedListIterator implements ListIterator {

        public LinkedListIterator() {
            Node position = null;
            Node previous = null;
        }

        public void add (Object element) {
            if (position == null) {
                addFirst(element);
                current = first;
            } else {
                //1 Node newNode = new Node();
                //2 newNode.data = element;
                //3 newNode.next = current.next;
                //4 current.next = newNode;
                //5 current = newNode;
            }
            previous = current
        }
注意:我故意不封装变量,并删去了多余的代码以节省空间。我知道它无法编译,但我的问题更具概念性

在添加方法中:
if语句只检测迭代器的位置是否为null,在这种情况下,它会将元素添加到LinkedList的开头,并将迭代器的位置设置为这个新创建的节点

else语句让我困惑:
第1行和第2行:创建一个新节点,并将其数据设置为元素参数。
第3行,这个新节点的下一个变量被设置为当前节点的下一个节点,即它被设置为迭代器指向的节点位置之后的任何位置。
第4行,迭代器当前指向的节点的“下一个”更改为新节点(有效地完成了在两个现有节点之间插入新节点)。
第5行,迭代器的位置设置为指向newNode

在else语句之后,迭代器指向的前一个节点被设置为当前节点

这里存在一个问题——这样做可以有效地同步迭代器的位置和之前的位置。我通过Eclipse调试器检查了这一点。这使得前面的代码变得无用。但是,我知道无论如何都不能使用标准迭代器反向遍历LinkedList

当我把这一行注释掉时,似乎没有什么变化。这条线是不必要的还是有一些我没有意识到的功能?(我提出这个问题的另一个原因是,在我们对remove()方法的注释中出现了与此相反的内容,这似乎也没有什么意义


编辑:似乎随着课程的发展,这个答案可能会得到回答。目前,我正在将上一个=当前行移到当前=新节点行上方。这似乎将所有值分开。

的合同规定,对下一个
的后续调用将不受影响,对
的后续调用将不受影响Vise
将返回新元素,这是在
add
的实现中更新以前的
的目的。您的教授可能给了您示例代码,稍后将在课程中展开。示例代码似乎包括将来支持双链接列表的部分。双链接ed列表不允许对列表进行反向遍历


关于一个完全不相关的话题;我为你努力理解和理解别人给你的任务而鼓掌,而不是为了完成任务而一鼓作气。这种习惯将来会对你有好处的!

这在我看来像是一个bug。
previous=current
任务需要在
cur之前完成rent=newNode
赋值。然后
previous
将引用旧的
current
,而新的
current
将是新创建的节点。

@Aubin它实际上是一个扩展常规的
迭代器
接口,包括
add
set
hasPrevio我们
方法。啊,道歉-应该更具体一些。我就是这么想的。我想我们以后会详细介绍。谢谢你,但是这样做会将上一个和当前同步在一起,这意味着在程序的其余运行中,它们被设置为相同的东西。我想正如其他人在这里所说的,它可能会在后面的lectu中进一步扩展res.谢谢你,它可能会在以后扩展。谢谢你的好话!我们实际上根本不需要修改add方法,我只想知道一切是如何工作的,什么时候最好使用ArrayList、LinkedList等。