簡體   English   中英

用Java克隆自引用類/鏈接對象

[英]Cloning Self Referencing Classes/ Linked Objects in Java

考慮以下代表二叉樹節點的類。

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. 如果單線程應用程序將填充結構並使用它,則保持原樣。

  2. 將字段定為最終字段(使BinaryTreeNode變為不可變),並更改設置程序以返回帶有新的右/左的新實例(這樣就避免了重復和並發修改),可以在多線程環境中使用。

  3. 克隆結構? 在某些情況下可能還可以。 您需要實現克隆本身並分配克隆的副本(在構造函數和setter中),但是我要說的是,您需要再次將字段標記為final,並且使用這種簡單的結構,您會得到第2種情況,其中包含額外的克隆開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM