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.

最新文章

  1. iOS 统计App 的代码总行数
  2. “胡”说IC——菜鸟工程师完美进阶
  3. jquery失去焦点与获取焦点事件blur() focus()
  4. webBrowser1_DocumentCompleted不停被调用
  5. opencv 在工业中的应用:圆孔定位
  6. vijosP1902学姐的清晨问候
  7. Spring 基于注解零配置开发
  8. 解决在Ubuntu系统下用matplotlib作图时出现中文乱码问题
  9. Matplotlib Toolkits:地图绘制工具
  10. Vs 中关于项目中的某 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”
  11. 线程等待(java)
  12. 【十一】jvm 性能调优工具之 jmap
  13. PMD -- An extensible cross-language static code analyzer.
  14. A - I Think I Need a Houseboat HDU - 1065(水题)
  15. 连接mysql && ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
  16. 查看Selinux和关闭Selinux
  17. nginx 官方docker镜像使用教程
  18. Java基础加强总结(二)——泛型
  19. PHP 多文件打包下载 zip
  20. C++继承引入的隐藏与重写

热门文章

  1. TypeScript完全解读(26课时)_汇总贴
  2. 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)
  3. Apache Shiro知识点总览
  4. 反射(type和assembly)
  5. Unity DOTS 走马观花
  6. codevs3145 汉诺塔游戏
  7. bzoj4889: [Tjoi2017]不勤劳的图书管理员(树套树)
  8. Visio画图(一):UML用例图
  9. LuoguP2323 [HNOI2006]公路修建问题 【最小生成树+二分】By cellur925
  10. [题解]luogu_P2155_BZOJ_2186沙拉公主的困惑