通过引用传递的二叉树可能吗?

时间:2014-03-29 19:12:32

标签: java arrays binary-tree

这里的第一次评论者。我试图在java中将char数组添加到二叉树中。问题是,当我尝试将char数组放入节点时(在将节点添加到树之前),该节点不是char数组而是引用。这是我的make-things-a-node类:

public class TreeNode {

char[] data;
TreeNode left, right, parent;
public TreeNode(char[] data) {
    this.data = data;
    left = right = parent = null;
}
}

这是我用来将char数组传递给节点类的行:

TreeNode theNode = new TreeNode(dictionary);

其中dictionary是char数组。当我打印theNode时,我会得到类似这样的内容:([C@58623a98)。我认为问题可能出在this.data,但我不确定。任何人都可以帮助我吗?

更新:当我打印dictionary时,我得到了我开始的char数组。

2 个答案:

答案 0 :(得分:2)

您所描述的是正常行为。打印对象的结果由其.toString()方法确定。如果未声明.toString()方法,则使用从.toString()类继承的默认Object方法,该方法提供您收到的输出。

如果您希望阵列在打印时看起来不错,您可以定义自己的.toString()方法,或使用Arrays.toString(yourArray)的实用方法。

答案 1 :(得分:0)

观察是正确的,每个节点都可以访问相同的字符数组 1 ; 如果您想要任何对象的副本,制作对象的副本。

以下任何一项都足以make a copy of a primitive array,但clone通常声名狼借。

this.data = Arrays.copyOf(data, data.length);
this.data = data.clone();

或者,你可以让来电者负责传递不同的对象。

// i.e. when omitting the above
new TreeNode(dictionary.clone());

更复杂的对象/对象图将需要不同的处理。我的建议是简单地尝试减少可变对象,这样就无需制作适当的副本。


1 也就是说,在Java中传递对象时,被复制/克隆/复制;相反,the value of the reference to the object is passed,因此引用了相同的对象。