<T> T[] toArray(T[] array) 不修改原数组

<T> T[] toArray(T[] array) not modifying the original array

我编写了以下代码作为 BST 的实现。添加 toArray() 仅供参考。返回的数组工作得很好,但它不会在 运行 方法之后修改原始数组。我不确定它是否有问题或者它是否按预期工作。有什么建议吗?

@Override
public Object[] toArray() {
    Object[] array = new Object[size];
    ArrayList <TreeNode<E>> list = new ArrayList<>();
    toArray(root, list);
    for (int i = 0; i < size; i++ ){
        array[i] = list.get(i);
    }
    return array;
}

protected void toArray(TreeNode<E> root, ArrayList <TreeNode<E>> array){
    if (root == null) return;
    toArray(root.left, array);
    array.add(root);
    toArray(root.right, array);
}

@Override
public <T> T[] toArray(T[] array) {
    if (size > array.length){
        array = (T[]) Array.newInstance(toArray()[0].getClass(), size);
    }
    if (size >= 0) System.arraycopy(toArray(), 0, array, 0, size);
    return array;
}

Java 永远不会用其他东西替换方法参数。

这正是语言设计的工作方式。所以是的,它正在按预期工作,即使可能不像您预期​​的那样。

您基本上是被“array = ...”行搞糊涂了。最好用新名称创建一个数组,而不是尝试重用该名称。

这就是为什么许多人(包括我在内)强烈建议将所有方法参数声明为“final”的原因,因为这样编译器会提醒您(除此之外它几乎没有做任何事情)。