Ответ 1
Ваши предположения кажутся неправильными. После clear()
вновь добавленные данные начинаются с индекса 0.
Скажем, у меня есть 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(Из 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)