我有两个TreeNode类的对象。这些字段称为a和b,其中包含以下字段:
value
index
parent
leftChild
rightChild
我想创建一个函数
swap(a,b)
将a的字段交换为b的字段,反之亦然。
我试图创建这样的函数,但是它很长而且效率很低,因为值没有按预期更改。 有任何简单的方法吗?
答案 0 :(得分:1)
我认为字段的类型是:
因此,请使用经典方法为每个文件交换值:
public static void swap(TreeNode a, TreeNode b) {
String tempValue = a.value;
a.value = b.value;
b.value = tempValue;
int tempIndex = a.index;
a.index = b.index;
b.index = tempIndex;
TreeNode tempNode = a.parent;
a.parent = b.parent;
b.parent = tempNode;
tempNode = a.leftChild;
a.leftChild = b.leftChild;
b.leftChild = tempNode;
tempNode = a.rightChild;
a.rightChild = b.rightChild;
b.rightChild = tempNode;
}
答案 1 :(得分:0)
将值从b
复制到临时变量,将值从a
设置为b
,将值从临时变量复制到a
。就是这样。
答案 2 :(得分:0)
在Java中,您实际上无法做到这一点(至少是在字面上直指您的问题的时候)。
您的情况如何?类似于:
// This is the aTreeNode instance.
TreeNode a = new TreeNode("ValueA", 4711, parentA, leftChildA, rightChildA);
// This is the aTreeNode instance.
TreeNode b = new TreeNode("ValueB", 4712, parentB, leftChildB, rightChildB);
您有两个变量a
和b
,它们分别引用一个TreeNode
实例(我将其称为aTreeNode
和bTreeNode
,只是给它们命名为I可以谈谈)。这些实例在其字段中具有不同的值。让我们描述一下:
a -> aTreeNode instance
------------------
"ValueA"
4711
-> parentA instance
-> leftChildA instance
-> rightChildA instance
b -> bTreeNode instance
------------------
"ValueB"
4712
-> parentB instance
-> leftChildB instance
-> rightChildB instance
如果调用类似swap(a, b)
的方法,则该方法将获取对aTreeNode
和bTreeNode
实例的引用。由于该方法不知道这些引用的来源(在我们的例子中为变量a
和b
,但也可能是数组元素或其他方法调用的结果),最好的办法是在这些实例中交换内容:
a -> aTreeNode instance
------------------
"ValueB"
4712
-> parentB instance
-> leftChildB instance
-> rightChildB instance
b -> bTreeNode instance
------------------
"ValueA"
4711
-> parentA instance
-> leftChildA instance
-> rightChildA instance
因此,在swap(a, b)
调用之后,a
仍然引用aTreeNode
实例,而b
bTreeNode
则仅交换内容。而且实例内容的这种根本性变化不太适合Java哲学,这使您遇到许多库类的麻烦,例如各种收藏和地图。
因此,最好在不调用方法的情况下交换两个变量:
TreeNode a = new TreeNode("ValueA", 4711, parentA, leftChildA, rightChildA);
TreeNode b = new TreeNode("ValueB", 4712, parentB, leftChildB, rightChildB);
TreeNode temp = a;
a = b;
b = temp;
它更快,更干净,结果是:
a -> bTreeNode instance
------------------
"ValueB"
4712
-> parentB instance
-> leftChildB instance
-> rightChildB instance
b -> aTreeNode instance
------------------
"ValueA"
4711
-> parentA instance
-> leftChildA instance
-> rightChildA instance