Глубокая копия при использовании ArrayList в java

Я знаю, что это тривиальный вопрос, но я хочу задать этот вопрос. Предположим, что у меня есть метод get, который возвращает ArrayList объектов. Сначала мы должны вернуть копию? Если да, то это должна быть глубокая копия ArrayList? Нужно ли нам делать глубокую копию, когда объекты внутри нее неизменяемы? Если мы используем этот тип конструктора

ArrayList<T> arr = new ArrayList<>(collection);

тогда элементы массива скопированы или они все еще указывают на старые значения? Спасибо

1 ответов


Это зависит от вашего варианта использования. Иногда желательно выставить базовую коллекцию, иногда нет.

Если вы, например, хотите использовать методы коллекции для своего класса, вы можете вернуть базовую коллекцию (или изменяемое представление базовой коллекции). Это позволяет клиентам вашего класса, например

phoneBook.getPeople().removeIf(Person::isAddressInvalid);

Если вы не хочу разоблачить базовую коллекцию, которую я бы пошел с

return new ArrayList<>(yourCollection);

Я думаю, что это очень редко возвращается глубокая копия в методе get.