_ArrayList<String> data;
_があるとします
data.add()
関数を使用して、この配列にデータを追加しています。この配列に10個の文字列を追加したとしましょう。配列のサイズは現在10です。
配列内のすべての要素を破棄するにはどうすればよいですか? data.clear()
関数は、10個すべての要素をnullに設定するだけです。したがって、別の要素を追加しようとすると、11の位置になります。 0からやり直したいだけです。
Forループを使用してすべてのデータを置き換えることができますが、ArrayList
を空にする方法は本当にあると思います。それは...ですか?
あなたの仮定は正しくないようです。 clear()
の後、新しく追加されたデータはインデックス0から始まります。
疑問がある場合は、JDKソースコードをご覧ください
ArrayList.clear()
ソースコード:
_public void clear() {
modCount++;
// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
_
size
が0に設定されているため、0の位置から開始します。
ArrayList
に要素を追加すると、新しいアイテムを追加できるように、バックエンド配列が拡張されます(つまり、必要に応じて配列データがより大きな配列にコピーされます)。 ArrayList.clear()
を実行する場合、配列要素への参照のみを削除し、size
を0に設定しますが、capacity
はそのままです。
ArrayList.clear(From Java Doc ):
このリストからすべての要素を削除します。この呼び出しが返された後、リストは空になります
data.clear()
の後、ゼロインデックスから確実に再び開始されます。
data.removeAll(data);
が作業を行うと思います。
clear()
関数がArraylistをクリアし、インデックス0から開始するのは正しくありません
明確なソースコードは、新しく追加されたデータが最初の位置を取得する理由を示しています。
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)です