Как клонировать ArrayList, а также клонировать его содержимое? - PullRequest
246 голосов
/ 04 апреля 2009

Как я могу клонировать ArrayList, а также клонировать его элементы в Java?

Например, у меня есть:

ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....

И я ожидаю, что объекты в clonedList не такие, как в списке собак.

Ответы [ 17 ]

0 голосов
/ 02 мая 2013

Пакет import org.apache.commons.lang.SerializationUtils;

Есть метод SerializationUtils.clone(Object);

Пример

this.myObjectCloned = SerializationUtils.clone(this.object);
0 голосов
/ 10 сентября 2012

для ваших объектов переопределяет метод clone ()

class You_class {

    int a;

    @Override
    public You_class clone() {
        You_class you_class = new You_class();
        you_class.a = this.a;
        return you_class;
    }
}

и вызов .clone () для Vector obj или ArraiList obj ....

0 голосов
/ 21 марта 2012

Вот решение с использованием универсального типа шаблона:

public static <T> List<T> copyList(List<T> source) {
    List<T> dest = new ArrayList<T>();
    for (T item : source) { dest.add(item); }
    return dest;
}
0 голосов
/ 04 апреля 2009

Остальные постеры верны: вам нужно перебрать список и скопировать в новый список.

Однако ... Если объекты в списке неизменны - вам не нужно их клонировать. Если у вашего объекта есть сложный граф объектов - они также должны быть неизменными.

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

0 голосов
/ 12 мая 2017

Я только что разработал библиотеку, которая может клонировать объект сущности и объект java.util.List. Просто скачайте банку в https://drive.google.com/open?id=0B69Sui5ah93EUTloSktFUkctN0U и используйте статический метод cloneListObject (список списка). Этот метод не только клонирует список, но и все элементы сущности.

0 голосов
/ 18 мая 2018

Я всегда использовал эту опцию:

ArrayList<Dog> clonedList = new ArrayList<Dog>(name_of_arraylist_that_you_need_to_Clone);
0 голосов
/ 04 апреля 2013

Простой способ с помощью commons-lang-2.3.jar этой библиотеки Java для клонирования списка

ссылка скачать commons-lang-2.3.jar

Как использовать

oldList.........
List<YourObject> newList = new ArrayList<YourObject>();
foreach(YourObject obj : oldList){
   newList.add((YourObject)SerializationUtils.clone(obj));
}

Надеюсь, это поможет.

: D

...