ArrayList мелкая копия итерация или клон () - PullRequest
15 голосов
/ 07 апреля 2010

Мне нужна мелкая копия java ArrayList, должен ли я использовать clone() или перебирать исходный список и копировать элементы в новый arrayList, что быстрее?

Ответы [ 4 ]

43 голосов
/ 07 апреля 2010

Нет необходимости повторять:

List original = ...
List shallowCopy = new ArrayList(original);

http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html#ArrayList%28java.util.Collection%29

10 голосов
/ 07 апреля 2010

Используйте clone() или используйте конструктор копирования.

Конструктор копирования выполняет дополнительное преобразование из переданной коллекции в массив, а метод clone() напрямую использует внутренний массив.

Имейте в виду, что clone() возвращает Object, поэтому вам придется привести к List.

8 голосов
/ 07 апреля 2010

Вместо того, чтобы выполнять итерации вручную, вы можете использовать конструктор копирования .

Что касается разницы в скорости между этим и использованием clone():

  1. не имеет значения
  2. Скорее всего, нет
  3. Сделайте тест для вашей конкретной конфигурации системы и используйте вариант
0 голосов
/ 24 ноября 2013

вопрос гласит, что shallowcopy не deepcopy. Копирование прямой ссылки из одной ссылки на массив также будет работать правильно. Глубокая копия включает в себя копию отдельного элемента в массиве.

ArrayList<Integer> list=new ArrayList<Integer>();
list.add(3);
ArrayList<Integer> list1=list; //shallow copy...

Есть ли проблема в этом ??

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