因为ArrayList和LinkedList都实现了List接口,所有无论选择哪一个,基本的List操作都是相同的。然而,ArrayList底层由数组支持;而LinkedList是由双向链表实现的,其中的每个对象包含数据的同时还包含指向链表中前一个与后一个元素的引用。因此,如果要经常在表中插入或删除元素,LinkedList就比较合适(LinkedList还有建立在AbstractSequentialList基础上的其他功能);否则,应该使用速度更快的ArrayList.
最佳的做法可能是将ArrayList作为默认首选,只有你需要使用额外的功能,或者当程序的性能因为经常从表中间进行插入和删除而变差的时候,才去选择LinkedList。如果使用的是固定数量的元素,那么既可以选择使用背后有数组支撑的List(就像Arrays.asList()产生的列表),也可以选择真正的数组。
CopyOnWriteArrayList是List的一个特殊实现,专门用于并发编程。