Полезность ArrayList <E>.clear ()? - PullRequest
5 голосов
/ 06 мая 2009

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

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

Ответы [ 6 ]

14 голосов
/ 06 мая 2009

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

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

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

3 голосов
/ 06 мая 2009

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

private final List<Thing> things = ...

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

2 голосов
/ 06 мая 2009

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

2 голосов
/ 06 мая 2009

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

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

2 голосов
/ 06 мая 2009

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

1 голос
/ 06 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...