Глубокое клонирование ArrayList и его элементов в Java
Пройдите тест, узнайте какой профессии подходите
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы
Быстрый ответ
Чтобы глубоко скопировать ArrayList
в Java, требуется последовательно создавать копию каждого его элемента. При этом, каждый объект из списка должен реализовать метод clone()
. Ниже приведен код для копирования списка:
ArrayList<MyCloneable> original = // ... инициализация списка с элементами;
ArrayList<MyCloneable> cloned = new ArrayList<>(original.size()); // создаём новый, пустой список для копий
for (MyCloneable hero : original) {
cloned.add(hero.clone()); // каждый элемент копируем отдельно
}
Важно: Элементы класса MyCloneable
должны переопределять метод clone()
таким образом, чтобы гарантировалось глубокое копирование их атрибутов.
Настройка и альтернативы
Пользовательский интерфейс ICloneable
Создайте собственный интерфейс ICloneable
для более строгого контроля процесса копирования:
public interface ICloneable<T> {
T clone(); // метод возвращает копию объекта
}
class MyObject implements ICloneable<MyObject> {
// реализация копирования
@Override
public MyObject clone() {
// выполняем глубокое копирование
}
}
Упрощение кода с использованием Stream API
Java 8 и более поздние версии позволяют упростить код