Как мне клонировать общий список в Java? - PullRequest
144 голосов
/ 10 сентября 2008

У меня есть ArrayList<String>, который я хотел бы вернуть копию. ArrayList имеет метод клонирования со следующей подписью:

public Object clone()

После того, как я вызову этот метод, как мне вернуть возвращенный Объект обратно к ArrayList<String>?

Ответы [ 14 ]

2 голосов
/ 10 сентября 2008

Это также должно работать:

ArrayList<String> orig = new ArrayList<String>();
ArrayList<String> copy = (ArrayList<String>) orig.clone()
1 голос
/ 04 января 2019
List<String> shallowClonedList = new ArrayList<>(listOfStrings);

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

1 голос
/ 23 января 2012

Я не профессионал Java, но у меня та же проблема, и я пытался решить с помощью этого метода. (Предполагается, что T имеет конструктор копирования).

 public static <T extends Object> List<T> clone(List<T> list) {
      try {
           List<T> c = list.getClass().newInstance();
           for(T t: list) {
             T copy = (T) t.getClass().getDeclaredConstructor(t.getclass()).newInstance(t);
             c.add(copy);
           }
           return c;
      } catch(Exception e) {
           throw new RuntimeException("List cloning unsupported",e);
      }
}
1 голос
/ 10 сентября 2008
ArrayList first = new ArrayList ();
ArrayList copy = (ArrayList) first.clone ();
...