Java中各种线性表的性能分析
来源:互联网 发布:北方金银分析软件 编辑:程序博客网 时间:2024/05/16 19:46
LinkedList与ArrayList、ArrayDeque的实现机制完全不同,ArrayList、ArrayDeque内部以数组的形式来保存集合中的元素,因此随机访问集合元素时有较好的性能;而LinkedList内部以链表的形式来保存集合中的元素,因此随机访问集合元素时性能较差;但在插入、删除元素时性能比较出色(只需要改变指针所指的地址即可)。需要指出的是,虽然Vector也是以数组的形式来存储集合元素的,但因为它实现了线程同步功能(而且实现机制也不好),所以各方面性能都比较差。
对于所有的内部基于数组的集合实现,例如ArrayList、ArrayDeque等,使用随机访问的性能比使用Iterator迭代访问的性能要好,因为随机访问会被映射成对数组元素的访问。
Java提供的List就是一个线性表接口,而ArrayList、LinkedList又是线性表的两种典型的实现;基于数组的线性表和基于链的线性表。Queue代表了队列,Deque代表了双端队列(既可作为队列使用,也可以作为栈使用),接下来对各种实现类的性能进行分析。
初学者可以无须理会ArrayList和LinkedList之间的性能差异,只需要知道LinkedList集合不仅提供了List的功能,还提供了双端队列、栈的功能就行。但对于一个成熟的Java程序员,在一些性能非常敏感的地方,可能需要慎重选择哪个List实现。
一般来说,由于数组以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能最好,所有的内部以数组作为底层实现的集合在随机访问时性能都比较好;而内部以链表作为底层实现的集合在执行插入、删除操作时有较好的性能。但总体来说,ArrayList的性能比LinkedList的性能要好,因此大部分时候都应该考虑使用ArrayList。
关于使用List集合有如下建议。
如果需要遍历List集合元素,对于ArrayList、Vector集合,应该使用随机访问方法(get)来遍历集合元素,这样性能更好;对于LinkedList集合,则应该采用迭代器(Iterator)来遍历集合元素。
如果需要经常执行插入、删除操作来改变包含大量数据的List集合的大小,可考虑使用LinedList集合。使用ArrayList、Vector集合可能需要经常重新分配内部数组的大小,效果可能较差。
如果有多个线程需要同时访问List集合中的元素,开发者可考虑使用Collections将集合包装成线程安全的集合。
- Java中各种线性表的性能分析
- 线性表之顺序表的性能分析
- Java基础 - 线性表的分析
- 线性表的各种操作
- 各种线性表的操作
- java中遍历map的性能分析
- linux系统的各种性能分析工具一栏表
- CUDA中各种内存及线程布局的性能实验分析(1)
- 线性表的各种题目,操作。
- 线性表的各种操作实现
- 线性表各种操作的实现
- C#中各种数组的性能比较
- java各种反射方式的性能问题
- 提高 Java 代码性能的各种技巧
- 提高 Java 代码性能的各种技巧
- 提高 Java 代码性能的各种技巧
- java各种锁机制的性能比较
- Java中各Set实现类的性能分析
- Get classpath for current running thread
- Java从服务器上获取时间,动态在jsp页面显示
- Python+OpenCV学习(15)---Lucas Kanade 角点光流轨迹跟踪
- 安全通信系统--OpenSSL的安装编译、证书生成
- UINavigationController
- Java中各种线性表的性能分析
- PHP详细学习计划
- Android的隐式意图
- 火车头采集器在线发布模块制作教程
- 构建乘积数组
- android Bitmap内存优化(四) android 本地资源图片的处理
- TCP报文段首部详解
- Android快速开发常用工具类
- iOS 打包工具生成