Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 中 ArrayList,LinkedList和Vector主要区别与概述

Java 中 ArrayList,LinkedList和Vector主要区别与概述

作者头像
大鹅
发布于 2021-06-15 07:56:33
发布于 2021-06-15 07:56:33
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

1. ArrayList与LinkedList 主要区别

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

2. ArrayList

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable
  1. ArrayList实现了List接口,即ArrayList实现了可变大小的数组。它允许所有元素,包括null。
  2. ArrayList是为可变数组实现的,当更多的元素添加到ArrayList的时候,它的大小会动态增大。它的元素可以通过get/set方法直接访问,因为ArrayList本质上是一个数组。
  3. 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
  4. 注意ArrayList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List: List list = Collections.synchronizedList(new ArrayList(...));

3. LinkedList

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, Serializable
  1. List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。LinkedList是为双向链表实现的,添加、删除元素的性能比ArrayList好,但是get/set元素的性能较差。
  2. 除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。
  3. 所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。
  4. 注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List: List list = Collections.synchronizedList(new LinkedList(...));

4. Vector

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Vector extends AbstractList implements List, RandomAccess, Cloneable, Serializable
  1. Vector和ArrayList几乎是一样的,区别在于Vector是线程安全的,因为这个原因,它的性能较ArrayList差。通常情况下,大部分程序员都使用ArrayList,而不是Vector,因为他们可以自己做出明确的同步操作。
  2. Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。
  3. 每个向量会试图通过维护 capacity 和 capacityIncrement 来优化存储管理。capacity 始终至少应与向量的大小相等;这个值通常比后者大些,因为随着将组件添加到向量中,其存储将按 capacityIncrement 的大小增加存储块。应用程序可以在插入大量组件前增加向量的容量;这样就减少了增加的重分配的量。

5. 总结

ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下:

1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。

2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

3.LinkedList不支持高效的随机元素访问。

4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

6. Ref

  1. https://blog.csdn.net/zhangqiluGrubby/article/details/80337748 源码分析
  2. http://pengcqu.iteye.com/blog/502676
  3. https://blog.csdn.net/zhangqiluGrubby/article/details/72870493
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/06/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
16、Collection接口及其子接口Set和List(常用类LinkedList,ArrayList,Vector和Stack)
16、Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collecti
YGingko
2017/12/28
9620
ArrayList、LinkedList和Vector的源码解析,带你走近List的世界
java.util.List接口是Java Collections Framework的一个重要组成部分,List接口的架构图如下:
李红
2019/09/04
3810
java集合【12】——— ArrayList,LinkedList,Vector的相同点与区别是什么?
要想回答这个问题,可以先把各种都讲特性,然后再从底层存储结构,线程安全,默认大小,扩容机制,迭代器,增删改查效率这几个方向入手。
秦怀杂货店
2021/03/26
4880
Java 集合系列08: List总结(LinkedList, ArrayList等使用场景和性能分析)
这里写图片描述 (01) List 是一个接口,它继承于Collection的接口。它代表着有序的队列。 (02) AbstractList 是一个抽象类,它继承于AbstractCollection。AbstractList实现List接口中除size()、get(int location)之外的函数。 (03) AbstractSequentialList 是一个抽象类,它继承于AbstractList。AbstractSequentialList 实现了“链表中,根据index索引值操作链表的全部函数”。
好好学java
2019/09/19
7520
Java 集合系列08: List总结(LinkedList, ArrayList等使用场景和性能分析)
JAVA面试50讲之5:Vector,ArrayList,LinkedList的区别
一组”对立”的元素,通常这些元素都服从某种规则   1.1) List必须保持元素特定的顺序   1.2) Set不能有重复元素   1.3) Queue保持一个队列(先进先出)的顺序
用户1205080
2019/01/02
1.9K0
用 ArrayList 还是 LinkedList?
ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类。ArrayList 和 LinkedList 都实现 List 接口。首先,让我们了解一下它们最重要的父接口——List。
芋道源码
2019/11/03
7310
[搞懂Java集合类1]ArrayList,Vector与Stack
本文非常详尽地介绍了Java中的三个集合类 ArrayList,Vector与Stack
Java技术江湖
2019/09/25
7480
Java Collection Framework : List
List 是 Java Collection Framework的重要成员,具体包括List接口及其所有的实现类。由于List接口继承了Collection接口,所以List拥有Collection的所有操作。同时,又因为List是列表类型,所以List本身还提供了一些适合自身的方法。ArrayList 是一个动态数组,实现了数组动态扩容,随机访问效率高;LinkedList是一个双向链表,随机插入和删除效率高,可用作队列的实现。
heasy3
2020/08/01
9560
Java Collection Framework : List
【Java提高十六】集合List接口详解
在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList、
Java帮帮
2018/03/15
1.2K0
【Java提高十六】集合List接口详解
对比Vector、 ArrayList、 LinkedList有何区别
这三者都是实现集合框架中的List,也就是所谓的有序集合,因此具体功能也比较近似,比如都提供按照位置进行定位、添加或者删除的操作,都提倛迭代器以遍历其內容等。但因为具体的设计区别,在行为、性能、线程安全等方面,表现又有很大不同。
王小明_HIT
2020/05/18
3500
Java 集合框架(3)---- List 相关类解析(下)
在上篇文章中,我们主要看了 AbstractCollection 抽象类 List 接口下的 AbstractList 抽象类,介绍了他们实现了 Collection 中一些抽象方法。在这篇文章中,我们来看一下 List 接口下的一些具体类,也就是我们平常经常使用的一些类:
指点
2019/01/18
6880
Java 集合框架(3)---- List 相关类解析(下)
ArrayList, LinkedList, Vector - dudu:史上最详解
ArrayList, LinkedList, Vector - dudu:史上最详解
Hongten
2018/09/13
7490
ArrayList、LinkedList、 Vector、Map 用法比较
ArrayList和Vector是采用数组方式存储数据,此数组元素总数大于实际存储的数据个数以便增加和插入元素,二者都允许直接序号索引元素,但是插入数据要移动数组元素等内存操作,所以它们索引数据快、插入数据慢。
阳光岛主
2019/02/19
6860
Vector源码阅读
前面已经学习过ArrayList和LinkedList的区别,今天再来学习一下List<E>接口的另一个实现类Vector.
呼延十
2019/07/01
4850
java基础回顾--ArrayList和LinkedLIst异同
在实际项目中集合的使用非常广泛,作为List接口下最常用的两个集合类,ArrayList和LinkedList两者之间异同是需要熟悉掌握,本小节对此部分知识点进行回顾
在水一方
2022/06/14
2940
java基础回顾--ArrayList和LinkedLIst异同
Vector、ArrayList、LinkedList有何区别?
Vector、ArrayList、LinkedList均为线型的数据结构,但是从实现方式与应用场景中又存在差别。
袁新栋-jeff.yuan
2020/08/26
5340
Vector、ArrayList、LinkedList有何区别?
ArrayList Vector LinkedList(一)
ArrayList Vector LinkedList 区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计 到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差, LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!
用户1112962
2018/07/04
4520
深入解析Java中的Vector集合类!
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
bug菌
2024/01/28
2430
深入解析Java中的Vector集合类!
Java 常见面试题
Solr是一个Java开发的基于Lucene的 企业级 开源 全文搜索 平台。 它采用的是反向索引,即从关键字到文档的映射过程。 Solr的资源以Document为对象进行存储,每个文档由一系列的 Field 构成,每个Field 表示资源的一个属性。 文档的Field可以被索引, 以提工高性能的搜索效率。 一般情况下文档都包含一个能唯一表示该文档的id字段。
说故事的五公子
2022/05/09
3270
Java 容器 & 泛型:二、ArrayList 、LinkedList和Vector比较
摘要: 原创出处 www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!
二哥聊运营工具
2021/12/17
2810
Java 容器 & 泛型:二、ArrayList 、LinkedList和Vector比较
相关推荐
16、Collection接口及其子接口Set和List(常用类LinkedList,ArrayList,Vector和Stack)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验