java - 使用 clone() 与 new obj

标签 java clone

我正在查看 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/

相关文章:

java - XML 字符串到对象数组

java - ListView 行不可点击(添加两个按钮后)

Java 泛型 - 具有 "extends"类型集合参数的方法拒绝有效参数?

javascript - 使用 jQuery "clone()"后如何维护(或重新应用)jQuery 对新元素的绑定(bind)?

javascript - 克隆时 SVG 变黑

jquery - 将 div 克隆到 obj 中并对其进行操作

java - 如何通过将 ByteArrayOutputStream 复制到 ByteArray 来克隆对象,然后通过 ByteArrayInputStream 调用它?

Java 多线程 : Informix 12. 10 - 无法执行物理顺序读取以获取下一行

java - jQuery 相对 URL 不起作用

c++ - 在 C++ 中复制多态对象