Мне нужна небольшая копия java ArrayList
, следует ли использовать clone()
или перебирать исходный список и копировать элементы в новый массивList, который быстрее?
ArrayList неглубокая копия итерации или клонирования()
Ответ 1
Используйте clone()
или используйте конструктор-копию.
Конструктор-копир делает дополнительное преобразование из переданной коллекции в массив, в то время как метод clone()
использует внутренний массив напрямую.
Имейте в виду, что clone()
возвращает Object
, поэтому вам нужно будет указать List
.
Ответ 2
Не нужно итерации:
List original = ...
List shallowCopy = new ArrayList(original);
http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html#ArrayList%28java.util.Collection%29
Ответ 3
Вместо повторного итерации вручную вы можете использовать конструктор .
Что касается разницы в скорости между этим и использованием clone()
:
- Это не имеет значения.
- Скорее всего нет.
- Сделайте тест для вашей конкретной конфигурации системы и используйте случай
Ответ 4
в вопросе говорится, что мелкотопия не является глубококопийной. Сопоставление прямой ссылки с одной ссылки на аррайалист на другую также будет работать правильно. Копировать копию включает копирование отдельного элемента в arraylist.
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(3);
ArrayList<Integer> list1=list; //shallow copy...
Есть ли в этом проблема?