ArrayList、Vector、LinkedList对比

ArrayList、Vector、LinkedList作为List的三个常用子类,为序列化一维数组提供了很好的保障。他们有共同点和各自的特点。依次分析。

介绍:

ArrayList:动态数组,从jdk1.2开始,array(数组)的升级版本,实现动态扩容,从而节省了一定的空间。

Vector:向量,自动增长数组,从jdk1.0就有

LinkedList:链表,利用类之间的引用关系,实现链式结构,jdk1.2开始。

特点

从ArrayList与Vector来谈:

  1. 这两个都是基于数组实现。
  2. Vector进行了方法的同步,从线程安全性上来看,Vector是线程安全的,而ArrayList不是。
  3. Vector和ArrayList的低层实现不同:
    1. 初始化策略:ArrayList在new的时候不初始化,而在第一次添加元素(add方法)的时候初始化数组大小。而Vector在new的时候就会初始化。(图ArrayList源码中add函数和Vector源码中构造方法)
    2. 扩容策略:ArrayList当装满了扩容1.5倍(图1),Vector默认扩容2倍(支持自定义capacityIncrement)(图2)
  4. 两者进行增删改查的效率是差不多的,因为都是用数组结构实现。

谈谈LinkedList:

  1. 基于双向链表实现。
  2. 增删数据效率优于数组,因为数组要移动很多数据(移动n-index个数据)
  3. 改查数据,由于要移动指针,链表效率稍微低一点。
  4. 线程不安全,没有同步机制。
  5. 不存在扩容和初始化问题,链式结构。

 

总结一下:当增删操作、在指定位置插入删除的操作较多的时候,选择LinkedList。当查找元素、更改元素、在末端增加删除元素的操作多,而删除操作少的时候,ArrayList和Vector比较好。

另附:java实现单链表、双链表、双向链表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值