Подтвердить что ты не робот

Функция clear() Java ArrayList

Скажем, у меня есть ArrayList<String> data;

Я добавляю некоторые данные в этот массив, используя функцию data.add(). Скажем, я добавил 10 строк в этот массив. Размер массива теперь равен 10.

Как уничтожить все элементы массива? Функция data.clear() просто устанавливает для всех 10 элементов значение null. Поэтому, когда я пытаюсь добавить еще один элемент, он просто попадает на 11 позицию. Я хочу только начать его с 0;

Я могу использовать цикл for для замены всех данных, но я действительно думаю, что есть способ просто удалить ArrayList. Это?

4b9b3361

Ответ 1

Ваши предположения кажутся неправильными. После clear() вновь добавленные данные начинаются с индекса 0.

Ответ 2

Если у вас есть какие-либо сомнения, посмотрите исходный код 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 остается таким, каким он был.

Ответ 3

ArrayList.clear(Из Java Doc):

Удаляет все элементы из этого списка. Список будет пуст после того, как этот вызов вернет

Ответ 4

После data.clear() он обязательно начнет снова с нулевого индекса.

Ответ 5

data.removeAll(data); будет работать, я думаю.

Ответ 6

Неверно, функция clear() очищает Arraylist и начинает с индекса 0

Ответ 7

Исходный код ясно показывает причину, по которой новые добавленные данные попадают в первую позицию.

 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)