Полезность ArrayList < E > .clear ()?
-
05-07-2019 - |
Вопрос
Я просматривал документацию по Java и наткнулся на метод clear () ArrayLists. Р>
Какой смысл в этом, в отличие от простого переназначения нового объекта ArrayList в переменную? Р>
Решение
Поскольку в одном списке может быть несколько ссылок, может быть предпочтительнее и / или более целесообразно очистить его, чем переназначить все ссылки.
Если вы много очищаете свой массив (например, в большом цикле), нет смысла создавать множество временных объектов. Конечно, сборщик мусора, в конце концов, очистит их, но нет смысла тратить ресурсы, если это не нужно.
И потому, что очистка списка - это меньше работы, чем создание нового.
Другие советы
Возможно, у вас есть последнее поле (переменная класса) List
:
private final List<Thing> things = ...
Где-то в классе вы хотите очистить (удалить все) вещи. Поскольку вещи
является окончательным, его нельзя переназначить. Кроме того, вы, вероятно, не хотите переназначать новый экземпляр List, так как у вас уже есть отличный экземпляр List.
Представьте себе ситуацию, когда в вашем коде есть несколько ссылок на один и тот же java.util.ArrayList
. Было бы почти невозможно или очень сложно создать новый экземпляр списка и назначить его всем переменным. Но java.util.ArrayList.clear ()
добивается цели!
Вы платите меньше с очисткой, чем с созданием нового объекта, если ваша цель была действительно очистить. Р>
Переназначение ссылки не очищает объект. Предполагается, что если нет других ссылок на него, он будет исправлен GC относительно скоро. В противном случае, у вас просто беспорядок. Р>
В дополнение к упомянутым причинам очистка списка часто более семантически правильна, чем создание нового. Если желаемый результат - очищенный список, вам нужно очистить список, а не создавать новый.
clear () не перераспределяет новый объект, поэтому это меньше влияет на производительность.