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

面试题 相关文章推荐
说出一些常用的类,包,接口
Sep 22 面试题
*p++ 自增p 还是p所指向的变量
Jul 16 面试题
类成员函数的重载、覆盖和隐藏区别
Jan 27 面试题
如何打印出当前源文件的文件名以及源文件的当前行号
Apr 05 面试题
SQL Server面试题
Apr 04 面试题
linux系统都有哪些运行级别
Mar 26 面试题
Linux如何修改文件和文件夹的权限
Jun 27 面试题
EJB的角色和三个对象
Dec 31 面试题
在浏览器端如何得到服务器端响应的XML数据
Nov 24 面试题
mysql有关权限的表都有哪几个
Apr 22 面试题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
Sep 26 面试题
UNIX文件系统分类
Nov 11 面试题
描述一下JVM加载class文件的原理机制
Dec 08 #面试题
解释一下抽象方法和抽象类
Aug 27 #面试题
康拓普公司Java笔面试
Sep 23 #面试题
会话Bean的种类
Nov 07 #面试题
你所知道的集合类都有哪些?主要方法?
Dec 31 #面试题
请说出你所知道的线程同步的方法
Apr 19 #面试题
如何强制垃圾回收
Oct 06 #面试题
You might like
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
Dom操作之兼容技巧分享
2011/09/20 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
使用graphics.py实现2048小游戏
2015/03/10 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
python字典DICT类型合并详解
2017/08/17 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
python反扒机制的5种解决方法
2021/02/06 Python
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
一套软件测试笔试题
2014/07/25 面试题
大学同学聚会邀请函
2014/01/19 职场文书
保密普查工作实施方案
2014/02/25 职场文书
历史专业学生的自我评价
2014/02/28 职场文书
小小商店教学反思
2014/04/27 职场文书
公司离职证明范本
2014/10/17 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
公司开业致辞
2015/07/29 职场文书
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python