克隆自引用Java中的类/链接对象

时间:2018-02-19 10:49:56

标签: java binary-tree

考虑以下表示二叉树节点的类。

public class BinaryTreeNode {
  private int key;
  private BinaryTreeNode left;
  private BinaryTreeNode right;

  public BinaryTreeNode(int key) {
    this.key = key;
    this.left = null;
    this.right = null;
  }

  public BinaryTreeNode(int key, BinaryTreeNode left, BinaryTreeNode right) {
    this.key = key;
    this.setLeft(left);;
    this.setRight(right);
  }

}

现在在构造函数BinaryTreeNode(int key, BinaryTreeNode left, BinaryTreeNode right)中,据我所知,直接设置左/右节点是个坏主意,不应该这样做。可能的方法是使用clone()创建副本并将其设置为left / right。但它将是一个浅层副本,它会产生问题,因为BinaryTreeNode也有非原始字段BinaryTreeNode本身。那么现在我被困在如何在这种情况下创建一个复制构造函数? 任何领导都会有所帮助。

1 个答案:

答案 0 :(得分:1)

认为这取决于您将如何使用此结构。可能的方法:

  1. 保持原样,如果单线程应用程序将填充结构而不是使用它。

  2. 使字段最终(因此BinaryTreeNode变为不可变),并更改setter以便以新的右/左方式返回新实例(因此没有重复且没有并发修改),应该可以在多线程环境

  3. 克隆结构?某些情况可能还行。你需要实现克隆本身并分配克隆拷贝(在构造函数和setter中),但我会说你需要再次标记字段final和这样简单的结构,你将得到案例2克隆的额外开销。