专栏首页用户4352451的专栏Vector、ArrayList、LinkedList有何区别?

Vector、ArrayList、LinkedList有何区别?

Vector、ArrayList、LinkedList均为线型的数据结构,但是从实现方式与应用场景中又存在差别。

1 底层实现方式 ArrayList内部用动态数组来实现;LinkedList内部采用双向链表实现;Vector内部用是 Java 早期提供的线程安全的动态数组实现。

2 读写机制 ArrayList在执行插入元素是超过当前数组预定义的最大值时,数组需要扩容,扩容过程需要调用底层System.arraycopy()方法进行大量的数组复制操作;在删除元素时并不会减少数组的容量(如果需要缩小数组容量,可以调用trimToSize()方法)扩容的大小会扩容到原来的50%;在查找元素时要遍历数组,对于非null的元素采取equals的方式寻找。

LinkedList在插入元素时,须创建一个新的Entry对象,并更新相应元素的前后元素的引用;在查找元素时,需遍历链表;在删除元素时,要遍历链表,找到要删除的元素,然后从链表上将此元素删除即可。

Vector与ArrayList仅在插入元素时容量扩充机制不一致(扩容大小为原来的1倍)。对于Vector,默认创建一个大小为10的Object数组,并将capacityIncrement设置为0;当插入元素数组大小不够时,如果capacityIncrement大于0,则将Object数组的大小扩大为现有size+capacityIncrement;如果capacityIncrement<=0,则将Object数组的大小扩大为现有大小的2倍。

3 读写效率

ArrayList对元素的增加和删除都会引起数组的内存分配空间动态发生变化。因此,对其进行插入和删除速度较慢,但检索速度很快。

LinkedList由于基于链表方式存放数据,增加和删除元素的速度较快,但是检索速度较慢。

4 线程安全性

ArrayList、LinkedList为非线程安全;Vector是基于synchronized实现的线程安全的ArrayList。

需要注意的是:单线程应尽量使用ArrayList,Vector因为同步会有性能损耗;即使在多线程环境下,我们可以利用Collections这个类中为我们提供的==synchronizedList(List list)==方法返回一个线程安全的同步列表对象。

下图是他们的继承和实现关系:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【LeetCode】旋转数组的最小数字day08

    https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/

    居士
  • 使用Vavr进行函数式编程(二)

    居士
  • 深入浅出TCP/IP协议

    TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合.传统上来说 TCP/IP 被认为是一个四层协议

    居士
  • 前端课程——定位继承与层叠

    z- index属性指定了一个具有定位属性的元素及其子代元素的z -order。当元素之间重叠的时候,z-order决定哪一个 元素覆盖在其余元素的上方显示。通...

    Dreamy.TZK
  • 数据结构初探

    数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始

    猿_人类
  • Java 基础(四)——集合源码解析 List

    前面我们学习了Iterator、Collection,为集合的学习打下了基础,现在我们来学习集合的第一大体系 List。

    蜻蜓队长
  • php数组和链表的区别总结

    1.、数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下...

    砸漏
  • 读书笔记:《算法图解》第二章 选择排序选择排序:#

    孙亖
  • 数组和链表的区别

    数组: 数组是将元素在内存中连续存放,由于每个元素占用内存 相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内...

    猿人谷
  • JDK1.9-数据结构

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    cwl_java

扫码关注云+社区

领取腾讯云代金券