List的几种实现类
(04) ArrayList, LinkedList, Vector, Stack是List的4个实现类。
ArrayList 是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低。
LinkedList 是一个双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList随机访问效率低,但随机插入、随机删除效率低。
Vector 是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现。但是ArrayList是非线程安全的,而Vector是线程安全的。但从JDK1.2已被抛弃,使用List具体实现类代替
Stack 是栈,它继承于Vector。它的特性是:先进后出(FILO, First In Last Out)。
如何选择适用List类
凡列表、链表、数组及周边应用,均可考虑List类应用,具体根据不同特性来选择。
(01) 对于需要快速插入,删除元素,应该使用LinkedList。
(02) 对于需要快速随机访问元素,应该使用ArrayList。
关于操作性能
底层由数组实现的,索引访问最快。
底层由链表机制的,索引访问慢,但遍历快,链式访问快
(01) 对于需要快速插入,删除元素,应该使用LinkedList。
(02) 对于需要快速随机访问元素,应该使用ArrayList。
多线程下的List类使用
1、自己实现同步操作,保证读写列表的操作是同步的
2、使用 Collections.synchronizedList 方法来“包装”该列表
参考: [Java][集合][List系列][LinkedList]
3、使用java.util.concurrent包下的适用替代类
其它相关操作
List的复制
1、System.arraycopy()方法
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
2、Arrays.copyXXX()系列方法