Ответ
Метод clear() выполняет две основные операции:
- Обнуляет ссылки: Все элементы внутреннего массива (
elementData) в диапазоне[0, size)устанавливаются вnull. Это позволяет сборщику мусора удалить сами объекты, если на них больше нет других ссылок. - Сбрасывает размер: Поле
sizeустанавливается в 0.
Важно: Вместимость (capacity) массива elementData не изменяется. Память, выделенная под массив, не освобождается.
Пример (упрощенная логика из JDK):
public void clear() {
modCount++; // Инкремент счётчика структурных изменений
for (int i = 0; i < size; i++) {
elementData[i] = null; // Шаг 1: обнуление ссылок
}
size = 0; // Шаг 2: сброс размера
}
Практический совет: Если после clear() список долго не будет использоваться или нужно сильно сократить потребление памяти, можно вызвать trimToSize(). Этот метод создаст новый массив минимальной длины, освободив память старого большого массива.
list.clear();
list.trimToSize(); // Теперь elementData.length == 0 (или близко к 0)