0

したがって、特定のインデックスに値を挿入したいのです。つまり、挿入したいインデックスが存在しないか、サイズよりも大きい場合は例外をスローします。それ以外の場合は、このメソッドを使用して、配列の容量がnullでないことを確認します。 :

private void ensureCapacity(int size_wanted)
{
  int max_capacity = storage.length;
  if (size_wanted > max_capacity) 
  {
    max_capacity = max_capacity * GROW_FACTOR +1; 
    storage = Arrays.copyOf(storage, max_capacity); // increases array size + copy contents
  } 
}

次に、この時点で、配列を拡張して、サイズを大きくしたオリジナルのコピーをすでに作成していると思いますよね?

ループを使用して、すべてを1つずつ右にシフトし、挿入するインデックス用のスペースを残すだけです。

4

2 に答える 2

1

System.arrayCopyそのように配列を移動するために使用できます。しかし、なぜArrayListによって提供される既存の機能を再構築するのですか?

于 2012-10-03T04:28:13.563 に答える
1

ループを使用する必要はありません。このメソッドを使用してSystem.arraycopy、配列内の要素を移動できます。重複する範囲を正しく処理します。

System.arraycopy(storage, insertPos, storage, insertPos+1, oldSize - insertPos);
于 2012-10-03T04:28:24.177 に答える