List集合

36 阅读2分钟

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将集合包装成线程安全的集合。