解释一下ArrayList Vector和LinkedList的实现和区别


Posted in 面试题 onApril 26, 2013
JDK 有几种有序集合java.util.List的实现方法,三个最熟悉的是Vector, ArrayList和LinkedList. 在Java性能方面问的比较多的就是这三个List的性能区别。

Vector和ArrayList都是基于储存元素的Object[] array来实现的,是根据索引来访问元素。Vector和ArrayList最大的区别就是synchronization(同步)的使用, 抛开两个只在序列化过程中使用的方法不说,没有一个ArrayList的方法是同步的,相反,绝大多数Vector的方法法都是直接或者间接的同步的,因 此,Vector是线程安全的而ArrayList不是,这样就造成ArrayList比Vector更快些,不过在最新的JVM中,这两个类的速度差别 是很小的,几乎可以忽略不计。

Vector和ArrayList的实现在索引访问和元素更新方面有着非常优秀的性能,因为不需要花费精力做范围检查(Range Checking),所以从Lise的末端添加元素,删除元素也有着非常优秀的性能,除非List的存储容量不足而需要扩展内部数组的长度,这种情况下插 入和删除数据需要一个数组的拷贝(当内部数组需要扩展的时候需要两次拷贝),需要拷贝的元素数量是List的长度减去索引号(也就是要插入和删除的索引号 与整个List的最后一个索引号),对插入来讲,插入元素到List的第一个位子的性能最差,插入到最后一个位子的性能最好,数组拷贝所需的时间会根据元 素的数量增加而显著增加。

LinkedList的实现

LinkedList是用双向链接节点的List实现的,根据索引访问元素的时候,你需要访问所有的节点只到到达你要的那个索引节点。往LinkedList插入元素是很简单的,只需要到达索引节点直接在这个节点前插入一个节点。

LinkedList的实现使根据索引访问元素和更新元素性能不如ArrayList和Vector好,因为你需要访问很多的节点才能到达你所要的那个节点。插入元素和删除元素跟插入和删除节点距list末端的距离有最大关系。

性能对比:

对较短的List来讲,ArrayList和Vector的性能非常接近,如果你只需要一个定长的List,Java数组(Ojbect[])的性能超过其他任何list类型。

整体来讲,ArrayList在绝大多数情况下都有着更好的性能,包括根据索引插入元素,或者插入到随即的位子,如果总是要插入数据到List的最前端,LinkedList的性能最好,但是你应该可以用反ArrayList得到更好的性能.

Tags in this post...

面试题 相关文章推荐
怎样让char类型的东西转换成int类型
Dec 09 面试题
Java基础知识面试要点
Jul 29 面试题
C语言笔试题回忆
Apr 02 面试题
OLEDBConnection和SQLConnection有什么区别
May 31 面试题
介绍一下Linux文件的记录形式
Apr 18 面试题
shell程序中如何注释
Feb 17 面试题
EJB发布WEB服务一般步骤
Oct 31 面试题
介绍一下MYSQL常用的优化技巧
Oct 25 面试题
如何写一个Java类既可以用作applet也可以用作java应用
Jan 18 面试题
Java语言程序设计测试题判断题部分
Jan 06 面试题
JAVA招聘远程笔试题
Jul 23 面试题
shell的种类有哪些
Apr 15 面试题
描述一下JVM加载class文件的原理机制
Dec 08 #面试题
解释一下抽象方法和抽象类
Aug 27 #面试题
康拓普公司Java笔面试
Sep 23 #面试题
会话Bean的种类
Nov 07 #面试题
你所知道的集合类都有哪些?主要方法?
Dec 31 #面试题
请说出你所知道的线程同步的方法
Apr 19 #面试题
如何强制垃圾回收
Oct 06 #面试题
You might like
php采集速度探究总结(原创)
2008/04/18 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP面向对象精要总结
2014/11/07 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
css3选择器基本介绍
2014/12/15 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
优秀的自荐信要注意哪些
2014/01/03 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
夜不归宿检讨书
2014/02/25 职场文书
初二学习计划书范文
2014/04/27 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android