34

私が持っているとしましょうArrayList<String> data;

関数を使用して、この配列にいくつかのデータを追加していdata.add()ます。この配列に10個の文字列を追加したとしましょう。配列のサイズは現在10です。

配列内のすべての要素を破棄するにはどうすればよいですか?このdata.clear()関数は、10個の要素すべてをnullに設定するだけです。したがって、別の要素を追加しようとすると、11の位置になります。0からやり直したいだけです。

forループを使用してすべてのデータを置き換えることはできますが、を空にする方法があると思いますArrayList。それは...ですか?

4

7 に答える 7

67

あなたの仮定は正しくないようです。の後clear()、新しく追加されたデータはインデックス 0 から始まります。

于 2013-01-12T12:26:12.287 に答える
26

疑問がある場合は、JDK ソースコードを見てください。

ArrayList.clear()ソースコード:

public void clear() {
    modCount++;

    // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;

    size = 0;
}

0 に設定されてsizeいるので、0 の位置から開始します。

に要素を追加する場合、新しいアイテムを追加できるようにするために、バックエンド配列が拡張されることに注意してくださいArrayList(つまり、必要に応じて配列データがより大きな配列にコピーされます)。実行するときArrayList.clear()は、配列要素への参照のみを削除sizeして 0 に設定しますが、元のcapacityままです。

于 2013-01-12T12:30:42.843 に答える
10

ArrayList.clear ( Java Docより):

このリストからすべての要素を削除します。この呼び出しが戻った後、リストは空になります

于 2013-01-12T12:27:59.870 に答える
9

それdata.clear()は間違いなくゼロインデックスから再び始まるでしょう。

于 2014-07-13T11:31:30.230 に答える
8

data.removeAll(data);仕事をするだろうと思います。

于 2013-01-12T12:25:46.940 に答える
5

clear()関数がArraylistをクリアし、インデックス0から開始するのは真実ではありません

于 2013-01-12T12:29:13.133 に答える
3

clear のソース コードは、新しく追加されたデータが最初の位置を取得する理由を示しています。

 public void clear() {
    modCount++;

    // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;

    size = 0;
    }

ちなみに、clear() は removeAll() よりも高速です。最初のものは O(n) で、後者は O(n_2) です

于 2013-01-12T12:32:07.617 に答える