Вопрос

Я просматривал документацию по Java и наткнулся на метод clear () ArrayLists.

Какой смысл в этом, в отличие от простого переназначения нового объекта ArrayList в переменную?

Это было полезно?

Решение

Поскольку в одном списке может быть несколько ссылок, может быть предпочтительнее и / или более целесообразно очистить его, чем переназначить все ссылки.

Если вы много очищаете свой массив (например, в большом цикле), нет смысла создавать множество временных объектов. Конечно, сборщик мусора, в конце концов, очистит их, но нет смысла тратить ресурсы, если это не нужно.

И потому, что очистка списка - это меньше работы, чем создание нового.

Другие советы

Возможно, у вас есть последнее поле (переменная класса) List :

private final List<Thing> things = ...

Где-то в классе вы хотите очистить (удалить все) вещи. Поскольку вещи является окончательным, его нельзя переназначить. Кроме того, вы, вероятно, не хотите переназначать новый экземпляр List, так как у вас уже есть отличный экземпляр List.

Представьте себе ситуацию, когда в вашем коде есть несколько ссылок на один и тот же java.util.ArrayList . Было бы почти невозможно или очень сложно создать новый экземпляр списка и назначить его всем переменным. Но java.util.ArrayList.clear () добивается цели!

Вы платите меньше с очисткой, чем с созданием нового объекта, если ваша цель была действительно очистить.

Переназначение ссылки не очищает объект. Предполагается, что если нет других ссылок на него, он будет исправлен GC относительно скоро. В противном случае, у вас просто беспорядок.

В дополнение к упомянутым причинам очистка списка часто более семантически правильна, чем создание нового. Если желаемый результат - очищенный список, вам нужно очистить список, а не создавать новый.

clear () не перераспределяет новый объект, поэтому это меньше влияет на производительность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top