List集合
特点:
1、有序的集合,存储和取出顺序相同。
2、允许存储重复的元素
3、有索引,可以使用普通的for循环遍历。
List的常用子类
- java.util.ArrayList 底层是数组结构,查询快,增删慢
- java.util.LinkedList 底层结构是链表,查询慢,增删快
ArrayList集合
本身线程不安全,需要程序员自己保证该集合的同步性。可以通过Collections工具类将ArrayList变成线程安全的。
Vector集合
线程安全
Queue集合
Queue用于操作队列数据结构集合,队列通常是指 **先进先出(FIFO)**的容器。
Deque集合
Deque是一个双端队列,双端队列可以同时从两端来添加、删除元素。双端队列即是队列也是栈。
PriorityQueue集合
默认是按元素的大小排序的,,违反了队列的最基本规则先进先出。
LinkedList集合
LinkedList实现了List集合和Deque集合,可以被当成双端队列来使用。内部使用的是链表
List集合的性能分析
List集合就是一个线性表接口,而ArrayList、LinkedList又是线性表的两种典型实例,基于数组的线性表和基于链表的线性表。Queue代表了队列,Deque代表了双端队列(即可作为队列使用,也可作为栈使用)。
一般来说,由于数组以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能最好,所有的内部以数组作为底层实现的集合在随机访问时性能都比较好,而内部以链表作为底层实现的集合在执行插入、删除操作时有较好的性能。但总体来说ArrayList的性能比LinkedList的性能要好,因此大部分时候都应该考虑使用ArrayList。
关于使用List集合的建议:
1、如果需要遍历List集合元素,对于ArrayList、Vector集合,应该使用随机访问方法(get)来遍历集合元素,这样性能更好,对于LinkedList集合,则应该采用迭代器(Iterator)来遍历集合元素。
2、如果需要经常执行插入、删除操作来改变包含大量数据的List集合的大小,可考虑使用LinkedList集合。使用ArrayList、Vector集合肯能需要经常重新分配内部数组的大小,效果可能较差。
3、如果有多个线程需要同时访问List集合中的元素,开发者可考虑使用Collections将集合包装成线程安全的集合。