Как очистить ArrayList?

7

У меня есть следующий код в ThisClass:

static ArrayList<MyClass> classlist; 

Если я позвоню:

ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);

И затем снова вызовите эту строку:

ThisClass.classlist = new ArrayList<MyClass>();

Будет ли он сбросить список ThisClass.classlist, т.е. список списков классов больше не будет содержать объект?

  • 1
    Да, конечно! Что еще вы ожидаете?
  • 0
    Вы говорите о ArrayLists не о arrays . Если нет никакой другой ссылки на старый Arraylist , это будет сбор мусора.
Показать ещё 2 комментария
Теги:
arraylist

3 ответа

16
Лучший ответ

Вот иллюстрация:

Код 1: Создание массива и добавление объекта

ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);

Результаты в этом:

Изображение 168946

Код 2: Сброс с помощью повторной инициализации

ThisClass.classlist = new ArrayList<MyClass>();

Результаты в этом - вы сбросите его, указав на новый объект:

Изображение 168947

Код 3: Сброс с помощью очистки объектов

То, что вы должны сделать, чтобы "больше не содержать объект", это:

ThisClass.classlist.clear();

Очищает циклы через все элементы и делает их нулевыми. Ну внутренне ArrayList также указывает на адрес памяти своих объектов, но для простоты просто подумайте, что они "удаляются", когда вы вызываете этот метод.

Изображение 168948

Код 4: Сброс всего списка классов

Если вы хотите, чтобы он "больше не содержал ArrayList", вы делаете:

ThisClass.classlist = null;

Это означает:

Изображение 168949

Также обратите внимание, что в названии вопроса упоминается "static ArrayList". static не имеет значения в этом контексте. Результатом вашей проблемы будет то же самое, будет ли объект статичным или нет.

  • 2
    +1 за хорошее визуальное объяснение.
3

призвание

ThisClass.classlist = new ArrayList<MyClass>();

это очистит ThisClass.classlist массив ( на самом деле, будет создан новый ArrayList и поместить его там, где старый был).

При этом гораздо лучше использовать:

ThisClass.classlist.clear();

Это более понятный способ: показывает ваше истинное намерение в коде, указывая на то, что вы действительно пытаетесь выполнить, тем самым делая код более читабельным/поддерживаемым.

2

Верный.

Технически, вы не очищаете ArrayList делая это, вы фактически создаете новый пустой ArrayList.

  • 0
    Хорошо. Благодарю. это было поведение, которое я намеревался.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню