2012-07-11 45 views
1

比方說,我有一個按升序排序的整數數組,我想插入一個新數字,並知道在什麼位置插入它。我怎麼能使用System.arraycopy。如何將一個元素插入到一個訂單數組中

System.arraycopy(items, i, items, i + 1, items.length+1); 
items[i] = n; 

或我必須創建從所述位置的臨時數組複製(移動位置的一個元件)插入到臨時數組,然後複製回原始數組

int[] newItems = new int[size + 1]; 
System.arraycopy(items, i, newItems, i + 1, items.length+1); 
items[i] = s; 
size++; 
System.arraycopy(items, 0, newItems, i, i); 
items = newItems; 

回答

0

你第一種方式將工作。

如果您不確定,請參閱有關arraycopy arraycopy的文檔。如果源和目的地相同,它將會像複製到臨時數組那樣工作,然後將其複製回原始數組中,這樣您就可以確信它會起作用!

0

的幾點思考/觀察

  • 爲什麼要問什麼,你可以很容易地測試?由於原始數組中還有另一個項目沒有地方
  • 第一種方式可能會引發IndexOutOfBounds(當時不會工作)
    • 因爲複製段的長度可以最多items.length - 我-1(有將是插入點和之後的長度-i,必須丟棄最後一個或者具有該異常)。
  • 第二種方法也會失敗。看起來你錯在了最後一個位置的長度。
相關問題