gpt4 book ai didi

java - 使用 clone() 与 new obj

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:33 24 4
gpt4 key购买 nike

我正在查看 Cracking the Code Interview 和这个问题。我应该在具有给定数字总和的二叉树中找到所有路径。我通常理解这段代码,但我想知道为什么答案使用 clone() 而不是使用 new 创建新对象?

public static void findSum(BinaryTreeNode root, int sum, ArrayList<Integer> buffer, int level) {
// done parsing or empty tree
if (root == null) {
return;
}
int tmp = sum;
buffer.add(root.value);
for (int i = level; i >= 1; i--) {
tmp -= buffer.get(i);
if (tmp == 0) {
print(buffer, i, level);
}
}
ArrayList<Integer> c1 = (ArrayList<Integer>) buffer.clone();
ArrayList<Integer> c2 = (ArrayList<Integer>) buffer.clone();
findSum(root.left, sum, c1, level + 1);
findSum(root.left, sum, c2, level + 1);
}

public static void print(ArrayList<Integer> bugger, int level, int i2) {
for (int i = level; i <= i2; i++) {
System.out.print(buffer.get(i) + " ");
}
System.out.println();
}

最佳答案

这是一个过早的微优化,归因于克隆速度稍快的事实(here is an answer with the details on why cloning is faster for array lists)。

一个看起来更干净的解决方案

ArrayList<Integer> c1 = new ArrayList<Integer>(buffer);

更容易理解,不需要转换,并且不太可能导致任何可衡量的性能差异。

关于java - 使用 clone() 与 new obj,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21466265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com