Глубокое клонирование ArrayList и его элементов в Java

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы глубоко скопировать ArrayList в Java, требуется последовательно создавать копию каждого его элемента. При этом, каждый объект из списка должен реализовать метод clone(). Ниже приведен код для копирования списка:

Java
Скопировать код
ArrayList<MyCloneable> original = // ... инициализация списка с элементами;
ArrayList<MyCloneable> cloned = new ArrayList<>(original.size()); // создаём новый, пустой список для копий
for (MyCloneable hero : original) {
    cloned.add(hero.clone()); // каждый элемент копируем отдельно
}

Важно: Элементы класса MyCloneable должны переопределять метод clone() таким образом, чтобы гарантировалось глубокое копирование их атрибутов.

Кинга Идем в IT: пошаговый план для смены профессии

Настройка и альтернативы

Пользовательский интерфейс ICloneable

Создайте собственный интерфейс ICloneable для более строгого контроля процесса копирования:

Java
Скопировать код
public interface ICloneable<T> {
    T clone(); // метод возвращает копию объекта
}

class MyObject implements ICloneable<MyObject> {
    // реализация копирования
    @Override
    public MyObject clone() {
        // выполняем глубокое копирование
    }
}

Упрощение кода с использованием Stream API

Java 8 и более поздние версии позволяют упростить код