8.5.4 各种线性表的性能分析
Java
提供的List
就是一个线性表接口,而ArrayList
、 LinkedList
又是线性表的两种典型实现:基于数组的线性表
和基于链表的线性表
。Queue
代表了队列, Deque
代表了双端队列(既可作为队列使用,也可作为栈使用),接下来对各种实现类的性能进行分析。
初学者可以无须理会ArrayList
和LinkedList
之间的性能差异,只需要知道LinkedList
集合不仅提供了List
的功能,还提供了双端队列
、栈
的功能就行。但对于一个成熟的Java
程序员,在一些性能非常敏感的地方,可能需要慎重选择哪个List
实现。
- 一般来说,由于
数组
以一块连续内存区来保存所有的数组元素,所以数组在随机访问
时性能最好,所有的内部以数组作为底层实现的集合在随机访问时性能都比较好; - 而内部以
链表
作为底层实现的集合在执行插入
、删除
操作时有较好的性能。
但总体来说, ArrayList
的性能比LinkedList
的性能要好,因此大部分时候都应该考虑使用ArrayList
.
List集合使用建议
关于使用List
集合有如下建议。
- 如果需要遍历
List
集合元素,- 对于
ArrayList
、Vector
集合,应该使用随机访问方法
(也就是get()
)来遍历集合元素,这样性能更好; - 对于
LinkedList
集合,则应该采用迭代器(Iterator
)来遍历集合元素.
- 对于
- 如果需要经常执行
插入
、删除
操作来改变包含大量数据的List
集合的大小,可考虑使用LinkedList
集合。使用ArrayList
、Vector
集合可能需要经常重新分配内部数组的大小,效果可能较差。 - 如果有多个线程需要同时访问
List
集合中的元素,开发者可考虑使用Collections
将集合包装成线程安全的集合。
原文链接: 8.5.4 各种线性表的性能分析