Java 复制ArrayList的不同方法

Java 复制ArrayList的不同方法,java,Java,假设a具有类型ArrayList,这三者之间有什么区别吗?(除了编译器抱怨#3中未检查的操作之外。) 一, ArrayList a1=新的ArrayList(a); 二, arraylista2=新的ArrayList(); a2.a(a); 三, arraylista3=(ArrayList)(a.clone()); 克隆将创建一个新实例,其中包含相同的元素。克隆可以很好地处理集合。所以最好不要使用它们 ArrayList<T> a1 = new ArrayList<T&

假设
a
具有类型
ArrayList
,这三者之间有什么区别吗?(除了编译器抱怨#3中未检查的操作之外。)

一,

ArrayList a1=新的ArrayList(a);
二,

arraylista2=新的ArrayList();
a2.a(a);
三,

arraylista3=(ArrayList)(a.clone());

克隆将创建一个新实例,其中包含相同的元素。克隆可以很好地处理集合。所以最好不要使用它们

ArrayList<T> a1 = new ArrayList<T> (a);
ArrayList a1=新的ArrayList(a);
是浅拷贝,速度相对较快


这可能会进一步帮助您

我敢打赌,由于大小调整问题,2的运行速度比1慢,但我不确定。您知道Java是开源的,对吗?是否有文档?@DennisMeng取决于它是以循环方式还是一次性方式分配内存。@S.D.True。我可以想象它确实一次分配所有内存(并调整一次大小),而不是在循环中(在循环中它可能调整大小
logn
次或其他任何次数),Clone()可以很好地处理集合,尽管它被认为是坏的。如果我错了,请纠正我。:)javadoc for说它制作了一个浅拷贝;结果是否与构造函数#1不同?(不包括性能问题)啊,误解了。然后,“所以最好不要使用它们。”与“创建一个新实例”相关。我完全同意你的观点!!:)
ArrayList<T> a2 = new ArrayList<T> ();
a2.addAll (a);
ArrayList<T> a3 = (ArrayList<T>) (a.clone());
ArrayList<T> a1 = new ArrayList<T> (a);