数组切片用于Java中的递归函数

时间:2018-03-07 07:18:32

标签: java recursion memory-management

我正在开发一个构造二叉树的Java实现,给定pre / inorder遍历数组。

代码看起来像这样(似乎工作但我没有进行过广泛的测试)

   public static TreeNode buildTree(int[] inOrder, int[] preOrder) {
    if(inOrder.length <= 0 || preOrder.length <= 0) {
        return null;
    }
    final TreeNode root = new TreeNode(preOrder[0]);
    final int i = indexOf(inOrder, root.getValue());
    root.setLeft(buildTree(Arrays.copyOfRange(inOrder, 0, i),
                           Arrays.copyOfRange(preOrder, 1, i + 1)));
    root.setRight(buildTree(Arrays.copyOfRange(inOrder, i + 1, inOrder.length), 
                            Arrays.copyOfRange(preOrder, i + 1, preOrder.length)));
    return root;
}

然而,这让我想到了java中数组切片的最佳实践。由于copyOfRange()返回一个新数组,这个解决方案的内存效率是否很低?

或者JavaVM足够智能,可以在创建所有这些类似的子数组时重用内存。

(我知道我可以用函数签名中的开始/结束索引重写这个函数。我的问题更多的是,在Java中是否可以像这样做数组切片)

0 个答案:

没有答案