【问题标题】:Copy constructor and a clone method in a Node class?Node类中的复制构造函数和克隆方法?
【发布时间】:2018-09-20 23:43:06
【问题描述】:

这是我关于 stackoverflow 的第一个问题,所以如果我没有正确提问,请给我一些关于如何更恰当地提问的见解。

我对如何在 Node 类中创建复制构造函数和克隆方法有点困惑。我了解如何为一般对象制作副本和克隆(不实现可克隆),但我还是 LinkedLists 的新手。

这是迄今为止我为 Node 类(LinkedList 类的内部类)编写的部分代码

private class Node
{
    private Foo fooObject;
    private Node link;

    public Node()
    {
        fooObject= null;
        link = null;
    }

    public Node(Foo fooObject, Node link )
    {
        this.fooObject = fooObject;
        this.setLink(link);
    }

    public Node(Node originalNode)
    {
        this(originalNode.getCourse(), originalNode.getLink());
    }

    public Node clone()
    {
        return new Node(this);
    }

    public Foo getFoo() 
    {
        return fooObject;
    }

    public void setFoo(Foo fooObject) 
    {
        this.fooObject = fooObject;
    }

    public Node getLink() 
    {
        return link;
    }

    public void setLink(Node link) 
    {
        this.link = link;
    }
}

复制一个 Node 对象对我来说仍然没有多大意义。当您实际使用 Node 对象时,这不会复制已经链接到另一个节点的节点吗?副本和原件将链接到同一个节点,除了副本没有链接到它的节点?如果我只是感到困惑,请帮助我理解,我不明白如何使用它。

为了澄清起见,我试图解决的问题是在学校的实验室里提出的。 “用内部类编写一个 LinkedList 类……内部类有一个复制构造函数和一个克隆方法……确保你的复制构造函数和克隆方法产生深层副本……”

*编辑 只是想澄清一些事情,被要求在 LinkedList 类和内部 Node 类中编写一个复制构造函数和克隆方法。我100%确定这一点,我没有时间问TA澄清,因为太多人问她问题了! *

谢谢!

【问题讨论】:

  • 你确定它说 inner 类有一个复制构造函数...?我同意这没有多大意义,但你的实现是正确的。
  • 是的,我 100% 确定,它要求为 LinkedList 类和内部 Node 类编写复制构造函数和克隆方法。我很困惑,因为我以前从未见过,但作为你第二个试图澄清这一点的人,TA 或教授可能只是犯了一个错误。上课时间我没有机会和助教澄清。顺便说一句,感谢您快速回复!

标签: java nodes clone copy-constructor singly-linked-list


【解决方案1】:

看起来你被要求在 Linked List 类上实现复制构造函数和克隆方法......而不是 Node 类。

当指定进行深度复制时,您克隆的链表对象应复制原始链表中的所有节点。

我建议你从:

public MyLinkedList(MyLinkedList originalNode)

【讨论】:

  • 谢谢你的回复,我也是这么想的,但是在实验过程中提出的问题特别概述了我们必须在 LinkedList 类和内部节点中编写一个复制构造函数和一个克隆方法班级。我很困惑,因为我以前从未见过,它甚至不在我的书中。 TA或教授会不会犯了一个错误?上课时间我没有机会澄清,因为太多人在和助教说话:/
  • 对,如果他们要求您制作节点的副本/克隆,那么您将其用作链表的深层复制过程的一部分。在制作节点副本后,Foo 对象将是正确的,但您需要更新链接,使其不再指向原始链接列表中的节点。将其视为创建链接列表深层副本的便捷方法。
  • 啊,我明白了。那就是我要更改链接的地方。感谢您的澄清!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
相关资源
最近更新 更多