解释一下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...

面试题 相关文章推荐
mysql_pconnect()和mysql_connect()有什么区别
May 25 面试题
Java中compareTo和compare的区别
Apr 12 面试题
一些.net面试题
Oct 06 面试题
别名指示符是什么
Oct 08 面试题
在C#中如何实现多态
Jul 02 面试题
介绍一下Make? 为什么使用make
Dec 08 面试题
飞利信loadrunner和软件测试笔试题
Sep 22 面试题
国外软件测试工程师面试题
Dec 09 面试题
什么是SCM(软件配置管理)
Aug 16 面试题
如何用JQuery进行表单验证
May 29 面试题
UNIX文件名称有什么规定
Mar 25 面试题
shell程序如何生命变量?shell变量是弱变量吗?
Nov 10 面试题
描述一下JVM加载class文件的原理机制
Dec 08 #面试题
解释一下抽象方法和抽象类
Aug 27 #面试题
康拓普公司Java笔面试
Sep 23 #面试题
会话Bean的种类
Nov 07 #面试题
你所知道的集合类都有哪些?主要方法?
Dec 31 #面试题
请说出你所知道的线程同步的方法
Apr 19 #面试题
如何强制垃圾回收
Oct 06 #面试题
You might like
简单谈谈favicon
2015/06/10 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
python简单区块链模拟详解
2019/07/03 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
服装设计专业毕业生求职信
2014/04/09 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
体育运动口号
2014/06/09 职场文书
遗嘱格式范本
2015/08/07 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
python之json文件转xml文件案例讲解
2021/08/07 Python