1

昇順でソートされた int の配列があり、新しい数値を挿入したいのですが、挿入する位置がわかっているとします。System.arraycopy を使用するにはどうすればよいですか。

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

または、一時配列への挿入位置(位置を1要素移動)から一時配列コピーを作成し、元の配列にコピーする必要がありますか?

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;
4

2 に答える 2

0

いくつかの考え/観察

  • 簡単にテストできることを尋ねるのはなぜですか?
  • 最初の方法は IndexOutOfBounds をスローする可能性があります (その場合は機能しません)
    • 元の配列には別のアイテムの場所がないため
    • コピーされたセグメントの長さは最大で items.length - i -1 になるため (挿入ポイント以降に length-i が存在するため、最後のセグメントを削除するか、その例外が必要です)。
  • 2番目の方法も失敗します。最後の位置の長さを間違えているようです。
于 2012-07-11T22:31:46.290 に答える
0

あなたの最初の方法はうまくいくでしょう。

自信がない場合は、 arraycopy arraycopyに関するドキュメントを参照してください。送信元と送信先が同じ場合、一時配列にコピーされたように動作し、一時配列が元の配列にコピーされるため、確実に機能します。

于 2012-07-11T22:00:39.383 に答える