2013-08-15 2 views
4

Есть ли разница между этими тремя, если a имеет тип ArrayList<T>? (За исключением того факта, что компилятор жалуется на непроверенных операций в # 3.)Различные способы копирования ArrayList

1.

ArrayList<T> a1 = new ArrayList<T> (a); 

2.

ArrayList<T> a2 = new ArrayList<T>(); 
a2.addAll (a); 

3.

ArrayList<T> a3 = (ArrayList<T>) (a.clone()); 
+4

Я готов поспорить, что # 2 работает медленнее, чем # 1 из-за изменения размера проблем, но я не знаю наверняка. –

+3

Вы знаете, что Java является открытым исходным кодом, не так ли? И есть документация? –

+0

@DennisMeng Зависит от того, выделяет ли он память в цикле или за один раз. –

ответ

1

Клонирование создает новый экземпляр, содержащий те же элементы. Клон отлично работает с коллекциями. Так что лучше не использовать их.

ArrayList<T> a1 = new ArrayList<T> (a); 

- это мелкая копия и сравнительно быстрая.

Это Thread может помочь вам в дальнейшем

+0

Вы имели в виду« делает _not_ отлично работать с коллекциями ». –

+0

Clone() отлично работает с коллекциями, хотя считается, что он сломан. Поправьте меня, если я ошибаюсь. :) –

+0

javadoc для [ArrayList.clone] (http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#clone()) говорит, что он делает мелкую копию; - результат, отличный от конструктора, # 1? (Не считая проблем с производительностью.) – ajb

Смежные вопросы