LinkedList相较于Arravlist的特点/优化

Arravlist底层是内存空间连续的数组,可以根据下标进行随机访问,效率比较高,因为在根据下标访问某一个元素时,并不是一个一个去查,而是算出来这个下标的地址,直接根据这个地址的指向去获取的,因为数组是一个连续的内存空间,在创建时指定了类型和长度,知道每一个元素的类型也就知道每个元素长度,然后算出访问的这个元素的地址值(比如创建一个int类型数组长度10,因为int占4字节,获取第5个元素时,4x5=20,就直接通过下标找到第五个元素的地址值)

但是一旦需要增删的话,如果增加元素后长度大于现有长度,就要重新创建一个ArrayList,再把原数组里面的数据拷贝过来,再添加新元素。

LinkedList底层是内存空间不连续的链表,是游离在内存空间中的一个个节点,每个节点有头结点和尾结点的地址信息以此来依次关联,虽然增删时只需要断链再重新接链,不影响其他节点,总体效率高,但是访问时需要一个一个进行遍历来确定是不是所需要的元素。一般使用场景是对首位元素操作频繁的场景,使用到的方法有   addFirst()addLast()  / offerFirst()和  offerLast() / offer()

 getFirst() /  peek()  /  element()  /  peekFirst() 和 getLast()  /  peekLast

removeFirst()removeLast()   pollFirst()  和  pollLast()   /   poll()

演示:

LinkedList虽然也有下标,但它经常做的是首尾相关的操作,所以他的专属方法有非常明显的特点:如   addFirst()addLast()  / offerFirst()和  offerLast() / offer()

 getFirst() /  peek()  /  element()  /  peekFirst() 和 getLast()  /  peekLast

removeFirst()removeLast()   pollFirst()  和  pollLast()   /   poll()

查询

注意点:Arravlist 和 LinkedList 都是List的实现类,所以其元素都是有下标的,都可以根据元素下标访问及各种操作,只不过LinkedList 常用的是首尾操作而已

性能优化:

一般来说,在数据量非常大的情况下:

Arravlist       增删效率慢,查询操作比较快,

LinkedList    增删效率高,查询操作比较慢,

但是如果可以熟练使用ArrayList,效率并不会比在创LinkedList低,这里可以从两个方面进行优化:

1、在数据长度不是特别大并且长度基本能控制的情况下,创建ArrayList时就可以预估好需要的长度,使用那个可以定义初始长度的构造方法,创建ArrayList,并且长度不能太大,不然创建时多长就会占用多大的内存,这样后期可以尽可大能的避免频繁的扩容。

2,在添加元素的时候使用尾插法而不是插入到数组中间。
如果这样合理的使用ArrayList,甚至可以让ArravList的增删效率超过LinkedList,因为LinkedList每次创建或删除链表都会对应的新建或销毁链表对象,大量的数据增删相对于正确使用的ArrayList还是比较消耗内存,浪费时间的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/138850.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB实现相关性分析

目录 一.基本理论 二.两类相关系数的对比 三.相关系数的假设检验 四.MATLAB的相关操作 五.其他有关的一些列技巧 六.案例展示 七.实战操作 一.基本理论 所谓相关系数,本质上是来衡量两组数据的关系大小——对应呈现函数关心的两种变量,那么我们可以…

[NLP] LLM---<训练中文LLama2(四)方式一>对LLama2进行SFT微调

指令精调 指令精调阶段的任务形式基本与Stanford Alpaca相同。训练方案也采用了LoRA进行高效精调,并进一步增加了可训练参数数量。在prompt设计上,精调以及预测时采用的都是原版Stanford Alpaca不带input的模版。对于包含input字段的数据,采…

计算机视觉与深度学习-卷积神经网络-卷积图像去噪边缘提取-图像去噪 [北邮鲁鹏]

目录标题 参考学习链接图像噪声噪声分类椒盐噪声脉冲噪声对椒盐噪声&脉冲噪声去噪使用高斯卷积核中值滤波器 高斯噪声减少高斯噪声 参考学习链接 计算机视觉与深度学习-04-图像去噪&卷积-北邮鲁鹏老师课程笔记 图像噪声 噪声点,其实在视觉上看上去让人感…

新建WinForm工程以及添加log

本篇博客将介绍如何使用Visual Studio新建一个WinForm工程,由于我还不知道有什么实时地看到程序输出的方法(调试当然是一个好方法),因此参照同事的代码, 加入了一个输出log的功能。 一、新建一个WinForm工程&#xff…

2023年中国研究生数学建模竞赛D题解题思路

为了更好的帮助大家第一天选题,这里首先为大家带来D题解题思路,分析对应赛题之后做题阶段可能会遇到的各种难点。 稍后会带来D题的详细解析思路,以及相关的其他版本解题思路 成品论文等资料。 赛题难度评估:A、B>C>E、F&g…

腾讯面试题:无网络环境,如何部署Docker镜像?

亲爱的小伙伴们,大家好!我是小米,很高兴再次和大家见面。今天,我要和大家聊聊一个特别有趣的话题——腾讯面试题:无网络环境,如何部署Docker镜像?这可是一个技术含量颇高的问题哦!废…

Mybatis SQL构建器

上一篇我们介绍了在Mybatis映射器中使用SelectProvider、InsertProvider、UpdateProvider、DeleteProvider进行对数据的增删改查操作;本篇我们介绍如何使用SQL构建器在Provider中优雅的构建SQL语句。 如果您对在Mybatis映射器中使用SelectProvider、InsertProvider…

启山智软/一款包含主流商城类型的一款电商中台系统100%开源

文章目录 介绍一、Smart Shop JAVA 微服务电商中台优势二、电商中台包含那些主流商城模式1.S2B2C供应链商城2.B2B2C多商户商城3.B2C单商户商城4.O2O外卖配送商城5.社区团购商城 6.演示地址总结 介绍 想要了解代码规范,学习商城解决方案,点击下方官网链接…

【PHP图片托管】CFimagehost搭建私人图床 - 无需数据库支持

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

【10个OOM异常的场景以及对应的排查经验】

文章目录 1. 场景描述:内存泄漏2. 场景描述:过多线程3. 场景描述:大量数据查询4. 场景描述:大文件读取5. 场景描述:高并发访问6. 场景描述:大字符串操作7. 场景描述:大数据集合操作8. 场景描述&…

Stable Diffusion WebUI插件posex安装以及无法使用完美解决办法汇总

posex是一个很好用的3Dopenpose编辑器。 我们只需要去官网找到源码就可以查看其用法。 对于安装大家应该都知道怎么去安装。 1. 如何安装 (1)一体包安装方式 类似于秋叶一体包直接在webui界面搜索posex就可以直接install。 最新版本好像已经取消了。 (2)手动安装方式…

婚礼策划展示小程序制作全程解析

随着互联网的发展,小程序已成为各行各业所钟爱的一种数字化工具。对于婚礼策划师来说,一款专为自己业务打造的小程序能够更好地展示婚礼策划方案,提升服务质量,加强与客户的沟通。以下就是制作婚礼策划展示小程序的全程解析。 一、…

链表oj3(Leetcode)——相交链表;环形链表

一,相交链表 相交链表(Leetcode) 1.1分析 看到这个我们首先想到的就是一个一个比较他们的值有相等的就是交点,但是如果a1和b2的值就相等呢?所以这个思路不行,第二种就是依次比较链表,但是这…

redis漏洞修复:(CNVD-2019-21763)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、漏洞内容二、镜像准备1.确认镜像版本2.下载镜像 三、配置文件准备1.获取配置文件2.修改配置文件 四、启动redis容器五、修改iptables文件总结 前言 漏扫发…

RocketMQ 源码分析——Producer

文章目录 消息发送代码实现消息发送者启动流程检查配置获得MQ客户端实例启动实例定时任务 Producer 消息发送流程选择队列默认选择队列策略故障延迟机制策略*两种策略的选择 技术亮点:ThreadLocal 消息发送代码实现 下面是一个生产者发送消息的demo(同步发送&#…

3、Elasticsearch功能使用

第4章 功能使用 4.1 Java API 操作 随着 Elasticsearch 8.x 新版本的到来&#xff0c;Type 的概念被废除&#xff0c;为了适应这种数据结构的改 变&#xff0c;Elasticsearch 官方从 7.15 版本开始建议使用新的 Elasticsearch Java Client。 4.1.1 增加依赖关系 <propertie…

手刻 Deep Learning -第壹章-PyTorch入门教学-基础概念与再探线性回归

一、前言 本章会需要 微分、线性回归与矩阵的基本观念 这次我们要来做 PyTorch 的简单教学&#xff0c;我们先从简单的计算与自动导数&#xff08; auto grad / 微分 &#xff09;开始&#xff0c;使用优化器与误差计算&#xff0c;然后使用 PyTorch 做线性回归&#xff0c;还有…

Ribbon负载均衡器

两种&#xff1a; 1.1 集中式负载均衡&#xff0c;服务端负载均衡 硬件 nginx 轮询、负载、哈希、随机、权重 为什么要做负载均衡&#xff1f; 1.2 客户端负载均衡器 用客户端 负载均衡器 很多机制可以自定义 小知识&#xff1a;不想让别人调自己&#xff0c;只想用别人的…

10.模板方法模式

模板方法模式&#xff0c;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 一 模板方法模式练习-试卷 UML图 测试代码 #include <iostream> using namespace std;class T…

QT---day2---9.18

完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两个按钮…