我撰寫了以下代碼作為 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;
}
uj5u.com熱心網友回復:
Java 永遠不會用其他東西替換方法引數。
這正是該語言設計的作業方式。所以是的,它正在正常作業,即使可能不像您預期??的那樣。
你基本上被你的“array = ...”行混淆了。最好使用新名稱創建陣列,而不是嘗試重復使用該名稱。
這就是為什么許多人(包括我在內)強烈建議將所有方法引數宣告為“final”,因為這樣編譯器會提醒您注意它(除此之外它幾乎沒有作用)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/363422.html
