java面试题(杨晓峰)---第八讲谈谈Vector,ArrayList,LinkedList有何区别?
Vector,ArrayList,LinkedList均为线性的数据结构,但是从现实方式与应用场景中又存在差别.
1 底层实现方式
ArrayList内部数组来实现,LinkedList内部采用双向链表表现,,Vector内部用数组实现.
2 读写机制
ArrayList在执行插入元素超过当前数组预定义的最大值时,数组需要扩容,扩容需要调用底层System.arraycopy()方法进行大量的数组复制操作,在删除元素时并不会减少数组容量,可以调用trimToSize()方法缩小数组容量,在查找元素时要遍历数组,对于非null的元素采用equals的方式寻找.
LinkedList在插入元素时,需创建一个新的Entry对象,并更新相应元素前后元素的索引,在查找元素时,需遍历链表,在删除元素时,需遍历链表,找到要删除的元素,然后将此元素删除即可.
Vector与ArrayList仅在插入元素时的容量扩充机制不一样,对于Vector,默认创建一个大小为10的Object数组,当capacitylncrement大于0扩容为:size+capacitylncrement..当capacitylncrement等于0扩容为:size*2.
3 读写速率
ArrayList对元素的增加和删除都会引起数组的内存分配空间动态发生变化,因此对其进行插入和删除较慢,但索引速度较快.LinkdeList由于基于链表方式存放数据,增加和删除元素的速度较快,但索引速度较慢.
LinkedList由于基于链表方式存放数据,增加和删除元素的数度比较快,但索引速度较慢.
4.线程安全
ArrayList,LinkedList为非线程安全,Vector是基于synchronized实现的线程安全的ArrayList.
最新文章
- iOS 统计App 的代码总行数
- “胡”说IC——菜鸟工程师完美进阶
- jquery失去焦点与获取焦点事件blur() focus()
- webBrowser1_DocumentCompleted不停被调用
- opencv 在工业中的应用:圆孔定位
- vijosP1902学姐的清晨问候
- Spring 基于注解零配置开发
- 解决在Ubuntu系统下用matplotlib作图时出现中文乱码问题
- Matplotlib Toolkits:地图绘制工具
- Vs 中关于项目中的某 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”
- 线程等待(java)
- 【十一】jvm 性能调优工具之 jmap
- PMD -- An extensible cross-language static code analyzer.
- A - I Think I Need a Houseboat HDU - 1065(水题)
- 连接mysql &;&; ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
- 查看Selinux和关闭Selinux
- nginx 官方docker镜像使用教程
- Java基础加强总结(二)——泛型
- PHP 多文件打包下载 zip
- C++继承引入的隐藏与重写
热门文章
- TypeScript完全解读(26课时)_汇总贴
- 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)
- Apache Shiro知识点总览
- 反射(type和assembly)
- Unity DOTS 走马观花
- codevs3145 汉诺塔游戏
- bzoj4889: [Tjoi2017]不勤劳的图书管理员(树套树)
- Visio画图(一):UML用例图
- LuoguP2323 [HNOI2006]公路修建问题 【最小生成树+二分】By cellur925
- [题解]luogu_P2155_BZOJ_2186沙拉公主的困惑