Java集合之ArrayList,LinkedList,Vector

JAVA中有序集合ArrayList/LinkedList/Vector 详解 JAVA中有序集合ArrayList/LinkedList/Vector/Stack 详解ArrayListVector和ArrayList差异LinkedList和ArrayList差异 ArrayList 构造方法 new ArrayList(); new ArrayList(int 大小);//制定底层数组的大小 new ArrayList(另外一个集合)//使用另外一个集合创建一个新集... 阅读详情




 ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。
      每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。默认初始容量为10。随着ArrayList中元素的增加,它的容量也会不断的自动增长。在每次添加新的元素时,ArrayList都会检查是否需要进行扩容操作,扩容操作带来数据向新数组的重新拷贝,所以如果我们知道具体业务数据量,在构造ArrayList时可以给ArrayList指定一个初始容量,这样就会减少扩容时数据的拷贝问题。当然在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。
      注意,ArrayList实现不是同步的。如果多个线程同时访问一个ArrayList实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。所以为了保证同步,最好的办法是在创建时完成,以防止意外对列表进行不同步的访问:
        List list = Collections.synchronizedList(new ArrayList(...));

底层使用数组
privatetransient Object[] elementData;
      transient??为java关键字,为变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。
      这里Object[] elementData,就是我们的ArrayList容器。


  LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现。基于链表实现的方式使得LinkedList在插入和删除时更优于ArrayList,而随机访问则比ArrayList逊色些。
      LinkedList实现所有可选的列表操作,并允许所有的元素包括null。
      除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
      此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。
      所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。
      同时,与ArrayList一样此实现不是同步的。

 在LinkedList中提供了两个基本属性size、header。
privatetransient Entry header = new Entry(null, null, null);privatetransientint size = 0;
      其中size表示的LinkedList的大小,header表示链表的表头,Entry为节点对象。 上面为Entry对象的源代码,Entry为LinkedList的内部类,它定义了存储的元素。该元素的前一个元素、后一个元素,这是典型的双向链表定义方式。所以LinkedList是双向链表


Vector可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。不过,Vector的大小是可以增加或者减小的,以便适应创建Vector后进行添加或者删除操作。
Vector实现List接口,继承AbstractList类,所以我们可以将其看做队列,支持相关的添加、删除、修改、遍历等功能。
Vector实现RandmoAccess接口,即提供了随机访问功能,提供提供快速访问功能。在Vector我们可以直接访问元素。
Vector 实现了Cloneable接口,支持clone()方法,可以被克隆。同时Vector是线程安全的。


以下对ArrayList和LinkedList进行效率对比:

首先插入速度对比:

public class TestTheSpeed {
	
    static long timeList(List list){   
    long start=System.currentTimeMillis();   
    String s1 = "a";
    for(int i=0;i<50000;i++)   
        list.add(0, s1);   
    return System.currentTimeMillis()-start;  
    }

	public static void main(String[] args) {
		 System.out.println("ArrayList耗时:"+timeList(new ArrayList()));   
         System.out.println("LinkedList耗时:"+timeList(new LinkedList()));   

	}

}
输出:

ArrayList耗时:266
LinkedList耗时:7


查找速度对比:

public class Test_Speed {
	static long start = System.currentTimeMillis();
	static long test (List list) {
		for(int i=0;i<50000;i++) {
			Object object = list.get(i);
		}
		long end = System.currentTimeMillis()-start;
		return end;
	}
	

	public static void main(String[] args) {
		LinkedList<String> linkedList = new LinkedList<>();
		ArrayList<String> arrayList = new ArrayList<>();
		for(int i=0;i<50000;i++) {
			linkedList.add("a");
			arrayList.add("a");
		}
		System.out.println("ArrayList索引所需要的时间"+test(arrayList));
		System.out.println("LinkedList索引所需要的时间"+test(linkedList));
		

	}

}
输出:

ArrayList索引所需要的时间17
LinkedList索引所需要的时间1460















如何利用GMS构建地下水数值模拟模型? 第一步:点图中三维网格的图标然后点Grid→Create Grid这个界面是用于创建一个有限差分网格的设置窗口。它允许你定义网格在三维空间中的范围、分辨率以及其他相关属性。这个界面提供了一个直观的方式来定义一个三维的有限差分网格,你需要指定每个维度上的范围、划分的单元格数量,以及一些控制单元格大小分布和网格方向的参数。这个网格通常会被用于数值模拟,例如地下水流模拟。在点击 "OK" 之前,请务必仔细检查所有参数是否符合你的建模需求。1. X-Dimension (X 轴维度)2. Y-Dimension ( 阅读详情

相关推荐

07群晖Docker部署nousresearch/hermes-agent

群晖Docker部署nousresearch/hermes-agent。

分享技术,传播知识! 1396

Java List 常用集合 ArrayList、LinkedList、Vector

Java 中的 List 是非常常用的数据类型。List 是有序的 Collection,Java List 一共有三个实现类,分别是:ArrayList、Vector、LinkedList 本文分析基于 JDK8 ArrayList ArrayList 继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化,初始容量为 10,允许值为 null,有序,非线程安全,擅长随机访问 ArrayList 还实现了 RandomAccess、Cloneable、..

低吟不作语的博客 511

【Pytorch教程】:卷积神经网络 CNN

Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 目录Pytorch教程目录什么是卷积神经网络 CNN卷积 和 神经网络池化(pooling)流行的 CNN 结构CNN 卷积神经网络MNIST手写数据CNN模型训练可视化训练全部代码 什么是卷积神经网络 CNN 卷积 和 神经网络 卷积神经网络是如何运作的呢, 举一个识别图片的例子, 我们知

nanke_4869的博客 8102

Java集合框架-Vector类,ArrayList集合,LinkedList集合

Java集合框架-Vector类,ArrayList集合,LinkedList集合

nie6668888的博客 1045

图像去模糊(二)——Richardson–Lucy算法

Richardson Lucy Algorithm(Richardson-Lucy算法详解及效果实例)

xueruhongchen的博客 3万+

保姆级避坑指南:在Ubuntu 22.04上成功复现VMamba模型(附完整环境依赖清单)

本文提供了在Ubuntu 22.04上复现VMamba模型的详细指南,包括环境准备、CUDA与PyTorch的精确匹配、依赖安装的疑难杂症解决以及完整环境清单。特别针对Linux系统下的环境复现问题,提供了实用的避坑技巧和验证方法,帮助开发者高效完成VMamba模型的部署。

weixin_29083373的博客 265

JAVA中的List系列集合ArrayList、LinkedList、Vector

在第一次添加数据的时候,会直接创建一个长度为10的数组来存储数据,如果当添加的数据长度超过了数组的长度,那么就会进行自动扩容,扩容为原来的1.5倍.。LinkedList是采用双向链表的形式存储数据,想要根据索引获取数据,那么链表就会进行从头节点或者尾节点进行遍历,直到找到你的索引位置为止,比较浪费时间,但是删除或者插入数据,由于是链表的形式,不会进行大量的数据移动;● 扩容流程:在创建了比原来的数组长度大1.5倍的数组之后,会对旧数组的数据进行复制,复制一份到新的数组当中,从而实现数组扩容。

weixin_65378964的博客 1150

OpenClaw + Qwen 模型集成飞书完整教程

1、环境要求:- **操作系统**: Windows- **Node.js**: v18+ (推荐 v20+)- **飞书账号**: 需要企业管理员权限(创建应用用)或者个人飞书账号创建个人应用- **网络**: 能访问 GitHub 和飞书开放平台2、安装Node.js下载完成后验证是否安装成功,cmd窗口输入“node --version”,显示版本号即为安装成功(如下图所示)3、获取大模型APIKEY(这里以Qwen为例)

qq_29609427的博客 478

java集合,ArrayList、LinkedList、Vector、set

java集合

2301_78216718的博客 1190

超详细!动态规划详解分析(典型例题分析和对比,附源码)

为啥要使用动态规划?什么时候使用动态规划?以下是我的一些理解和心得,如果你感兴趣,就接着往下看吧。 对您有帮助的话记得给我点个赞哟! 动态规划的基本思想 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。 动态规划算法与分治法类似,其基本思想也是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解中 得到原有问题的解。与分治法不同的是,动态规划经分解后得到的子问题

qq_44398094的博客 8万+

LLM 大模型学习必知必会系列(十一):大模型自动评估理论和实战以及大模型评估框架详解

LLM 大模型学习必知必会系列(十一):大模型自动评估理论和实战以及大模型评估框架详解

丨汀、的博客 3217

java List集合(ArrayList,LinkedList,Vector)

本篇文章主要介绍java List集合的三种实现类ArrayList,LinkedList,Vector以及部分理论 什么是List集合? ArrayList,LinkedList,Vector都是隶属于List集合的一种;集合List List代表了有序可重复集合,可直接根据元素的索引来访问。 List接口常用的实现类有:ArrayList、LinkedList、Vector。List集合的特点: List的特点,ArrayList,LinkedList,Vector的相同点与区别:List集合的增删改查

Jin_Xiang123的博客 1884

Sigrity PowerDCPackage ThermalCharacterization模式提取封装基板热阻参数-Single-Die Package DELPHI compact Thermal

DIE(定义DIE的参数):material设置为silicon(硅),Attach material(贴片的材料,设置为Die Attach),Attach thickness(贴片的材料的厚度,厚度设置为0.001mm,点击ok。Cap为覆盖材料,Material定义材料类型,thickness定义厚度,length和width定义长宽,Adhesive Material为胶的材料,Adhesive Material为胶的厚度,本例不定义,跳过即可。

weixin_54787054的博客 363

java ArrayList集合 & LinkedList集合 & Vector集合

ArrayList集合 此实现不是同步的,就意味着,它是多线程模式,那么速度就很快。 底层源码可以看出它是通过数组的赋值来实现增删的,所以说效率低下。 如果这个需求查询比较多,那么就使用ArrayList集合 如果增删比较多,那么就使用LinkedList集合,因为ArrayList集合效率就会比较低下了。 LinkedList集合 概述 此实现不是同步的,就意味着,它是多线程模...

_清风明月的博客 1508

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java集合ArrayList,LinkedList,Vector的相同点与区别是什么?

本篇作为,java集合中 ArrayList,LinkedList,Vector常用集合的分析概括,已便大家认识这三种集合的区别,和特点

sjs52406的博客 1350

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java集合基础_Collection(ArrayList、LinkedList)、Vector

Java基础-集合体系结构详细笔记(Collection、List、ArrayList、LinkedList、Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就是对数据结构的封装 目录Java基础-集合体系结构详细笔记(Collection、List、ArrayList、LinkedList、Vector)数组与集合的比较集合的体系结构Collection接口...

JunsIr的技术栈 1908

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java List 集合详解(ArrayList、LinkedList、Vector)

特性ArrayListLinkedListVector底层结构动态数组(Object[])双向链表动态数组(Object[])访问速度快(O(1) 按索引访问)慢(O(n) 按索引访问)快(O(1) 按索引访问)插入/删除慢(中间插入需要移动元素)快(只需修改节点指针)慢(同 ArrayList)线程安全否(需手动加锁)否(需手动加锁)是(所有方法都有 synchronized)内存占用较低(仅存储数据)较高(需额外存储前驱/后继指针)较低(仅存储数据)适用场景大量读、少量改;

2302_79797878的博客 1129

Java集合01_ArrayList、LinkedList 和 Vector

Java集合 数组的优点: 元素连续分配空间,根据下标访问元素(随机访问效率高) 数组的局限性: 长度固定不变,不能自动扩容 删除和插入操作效率较低,需要移动大量的元素 元素的类型只能是一种 元素连续分配空间,在 heap 内存中必须找到连续的内存空间来存储数组(对内存要求较高) 为了解决数组的局限性,引入了容器类的概念 ArrayList ArrayList 底层数据结构是数组,查询快,增删慢,线程不安全,效率高 add()、size()、isEmpty() contains()、indexOf()、

BLU_111的博客 12万+

Java集合之ArrayList / Vector / LinkedList

Java集合之ArrayList /Vector / LinkedList ArrayList Vector LinkedList 对比 Java集合中List接口的实现类主要有ArrayList/Vector/LinkedList。本篇博客主要记录三者的常用用法及区别。 ArrayList ArrayList可以理解为长度可变的数组Array,JVM为其分配连续的内存空间,...

子路 1207

java集合之List篇——ArrayList补充和Vector、LinkedList的底层源码

上一篇介绍了基本的集合(list,Set,Map),还有对于ArrayList的源码解析。这一篇主要讲其他集合的底层源码。目录前言一、ArrayList底层源码讲解的补充(很简单)二、Vector底层源码三、LinkedList的底层源码1.概述2.要用到的常量和变量3.分步源码详解四、总结LinkedList的底层就是数据结构中的双向链表,没有容量之说,每一个 节点用一个Node类对象(静态内部类充当LinkedList类的成员属性)来存储,内容如下:item:存入集合的一个数据。

2202_75483664的博客 1383

java List集合框架(collection,ArrayList,Vector,LinkedList)

集合框架List 集合框架List(ArrayList特有方法、特有迭代器、具体对象特点、增长因子论证) List 元素是有序的、可重复ArrayList、Vector默认初始容量为10 ArrayList:线程不安全,查询速度快     底层数据结构是数组结构     增长因子为1.5:       如 ArrayList的容量为10,一次扩容后是容量为15 Vector:线程安全,但速度慢  ...

headnull的博客 381

Java集合ArrayList,Vector,LinkedList

ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记

我是一只小小牛的博客 296

Java List 集合全面解析:ArrayList、LinkedList 与 Vector 的深度对比

List 是 Java 集合框架中Collection有序性:元素的存储顺序与插入顺序一致;可重复性:允许存储重复的元素;索引访问:支持通过索引(从 0 开始)对元素进行增删改查操作。常见的 List 实现类有ArrayListLinkedList和Vector,它们在底层结构、线程安全、效率等方面各有侧重。特性ArrayListLinkedListVector底层结构动态数组双向链表动态数组线程安全非线程安全非线程安全线程安全查询效率高(O (1))低(O (n))

2301_82132279的博客 1220

一文看懂 Java 三大 List 集合:ArrayList、LinkedList 与 Vector

本文对比分析了Java中三种List实现类:ArrayList基于动态数组,查询快增删慢;LinkedList基于双向链表,增删快查询慢;Vector是线程安全的早期集合类,性能较差。文章详细介绍了各集合的特点、常用操作和遍历方式,并给出使用建议:频繁查询用ArrayList,频繁增删用LinkedList,多线程环境可使用CopyOnWriteArrayList。最后总结"ArrayList查得快,LinkedList删得快,Vector太古老",帮助开发者根据场景选择合适的集合类型。

alkamgg的博客 620

Java集合(2)——深入理解ArrayList、Vector和LinkedList

回顾Java集合主要分为两个体系结构,Collection和Map。这篇博客主要介绍Collection子接口List下的三个经常使用的实现类:ArrayList、Vector和LinkedList。详细内容参见《Java基础——集合》先看下关系图: 1、ArrayList这是List最常用的实现类,想一想为什么他最常用? Array,在java中意为“数组”。猜想ArrayList和

技术交流 3414

java集合,ArrayList、LinkedList和Vector,多线程场景下如何使用 ArrayList

java集合

weixin_44797327的博客 1503
上一篇: Java集合类
下一篇: Java集合之Set
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值