博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试刷题8:Vector ArrayList LinkedList区别?
阅读量:4210 次
发布时间:2019-05-26

本文共 869 字,大约阅读时间需要 2 分钟。

image.png
高效的管理和操作数据(数据结构)是非常重要的,java提供了对应的集合框架。
我是李福春,我在准备面试,今天的问题是:
Vector,ArrayList,LinkedList有什么区别?
这3个货都是List的直接子类或者间接子类,实现的是顺序集合,都提供了add,delete,index,遍历等操作。
区别是:
Vector是线程安全的,性能略差,自动扩容按照1倍扩容,适合按照顺序检索的场景;
ArrayLIst是非线程安全的,性能高,扩容基数0.5, 适合按照顺序检索的场景;
LinkedList是双向链表,是非线程安全的,性能高,不存在扩容,适合增加,删除的场景

Java的集合体系

image.png
Map没有继承Collection,不归纳如集合体系;
一些集合的实现是依赖于map来实现的;
比如TreeSet, 底层是 TreeMap , 只使用了key;  它是有序的,查询时间复杂度是常数级别,增加,删除,包含操作时间复杂度是log(n)
HashSet底层实现是HashMap , 它是无顺序的,增删包含操作是常数级别的时间复杂度,但是不宜设置过大的容量;
以上的集合除了Vector都是线程非安全的。

集合的算法

主要说默认的排序算法,Arrays.sort(T[])
当传入原始类型,使用的是双轴快速排序;
当传入对象类型,使用的是归并和二分插入综合的排序;
java8提供了stream,集合也支持并行排序。可以充分发挥多核心的计算能力。

Java8对集合的改进

基于接口的defalut方法,扩展了现有集合,可以轻松的Stream化;

小结

本篇先说明了ArrayList,LinkedList,Vector的相同点,再从线程安全,底层结构,扩容,性能,适用场景做了区别对比。
在扩展回顾了java的Collection体系包含的容器,特别之处了TreeSet,HashSet的底层实现马甲。
在简单说了一下集合的默认排序算法和并行排序算法,以及集合在java8中的Stream化。

image.png

原创不易,转载请注明出处,欢迎多沟通交流

你可能感兴趣的文章
同步与异步的区别
查看>>
IT行业--简历模板及就业秘籍
查看>>
JNI简介及实例
查看>>
JAVA实现文件树
查看>>
linux -8 Linux磁盘与文件系统的管理
查看>>
linux 9 -文件系统的压缩与打包 -dump
查看>>
PHP在变量前面加&是什么意思?
查看>>
ebay api - GetUserDisputes 函数
查看>>
ebay api GetMyMessages 函数
查看>>
php加速器 - zendopcache
查看>>
手动12 - 安装php加速器 Zend OPcache
查看>>
set theme -yii2
查看>>
yii2 - 模块(modules)的view 映射到theme里面
查看>>
yii2 - controller
查看>>
yii2 - 增加actions
查看>>
php图像处理函数大全(缩放、剪裁、缩放、翻转、旋转、透明、锐化的实例总结)
查看>>
magento url中 uenc 一坨编码 base64
查看>>
强大的jQuery焦点图无缝滚动走马灯特效插件cxScroll
查看>>
Yii2.0 数据库查询
查看>>
yii2 db 操作
查看>>