JavaSE-ArrayList、vector、LinkedList之间的区别

本文详细对比了ArrayList、Vector和LinkedList三种List接口的实现类。ArrayList和Vector基于数组实现,适合快速查询,但线程安全不同,Vector加锁降低效率。LinkedList采用链表结构,适合频繁增删操作,但查询慢。ArrayList无特殊功能,LinkedList提供首尾操作,而Vector包含类似添加和获取元素的方法。
摘要由CSDN通过智能技术生成

首先List中ArrayList、vector、LinkedList都是List接口的实现类,都是有序不唯一的集合,就是说存储的数据元素都是有序列的(可以通过索引进行遍历)且集合中的元素是可以重复的,有别于Set集合数据元素唯一的特点。

存储结构:

ArrayList 和Vector都是基于数组实现存储的,集合中的元素的位置都是有顺序即连续的;LinkedList是基于双向链表实现存储的,集合中的元素的位置是不连续的。
ArrayList和Vector是按照顺序将元素存储(从下表为0开始),删除元素时,删除操作完成后,需要使部分元素移位,默认的初始容量都是10

线程安全性:

Vector和ArrayList底层实现原理一致,而Vector是线程安全的,其实现原理就是在方法中加入关键字synchronized从而在线程A访问A方法时线程B等待,但在并发下影响效率,所以在新版jdk中引入ArrayList,其方法中不加锁,牺牲安全性换来效率,所以ArrayList是线程不安全的,因此性能比ArrayList差很多;
LinkedList线程不安全,相比于集合Vector和ArrayList在指定位置插入,修改,删除等操作上速度较快,随机访问的性能较差。

增删改查效率:

访问集合数据,LinkedList要移动指针,从一端向另一端查找,效率很低。
而新增和删除操作add和remove,对于linkedList开销是统一的,分配一个Entry对象;但对于Vector和ArrayList,在尾端操作数据,开销是固定的,但是如果不是在尾端,可能会导致数组重新分配,而且结尾会预留一定的容量空间。

特有功能(函数):

ArrayList中没有特有的函数,都是常见且常用的方法:
Add方法用于添加一个元素到当前列表的末尾
AddRange方法用于添加一批元素到当前列表的末尾
Remove方法用于删除一个元素,通过元素本身的引用来删除
RemoveAt方法用于删除一个元素,通过索引值来删除
RemoveRange用于删除一批元素,通过指定开始的索引和删除的数量来删除
Insert用于添加一个元素到指定位置,列表后面的元素依次往后移动
InsertRange用于从指定位置开始添加一批元素,列表后面的元素依次往后移动

另外,还有几个类似的方法:
Clear方法用于清除现有所有的元素
Contains方法用来查找某个对象在不在列表之中

LinkedList中特有的方法:
添加链表首尾元素:addFirst、addLast
删除链表首尾元素:removeFirst、removeLast
获取链表首尾元素:getFirst、getLast

Vector 中特有的方法:
添加:addElement类似于add
获取索引处的元素值:ElementAt(int index):
迭代器:Enumeration elements 相当于iterator

总结:

ArrayList:底层数据结构是数组,查询快,增删改慢,线程不安全,效率高,没有同步;
LinkedList:底层数据结构是链表,查询慢,增删改快,线程不安全,效率高,没有同步;
Vector:底层数据结构是数组,查询快,增删改慢,线程安全,效率低,同步;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值