当前位置: 首页 > news >正文

集合-1 数组ArrayListLinkedList

一.数组

1.什么是数组?

数组是一种用连续的内存空间存储相同类型数据的线性数据结构。

2.为什么数组下标是从0开始?

(1)数组根据下标查找元素是基于寻址公式:元素地址=数组首地址+索引i*数组存储数据类型的大小

(2)如果下标从0开始,则寻址公式应改为:元素地址=数组首地址+(i-1)*数组存储数据类型的大小;对cpu而言多了一个(i-1)的操作,性能下降。

3.数组查找元素的时间复杂度

(1)已知下标:O(1)

(2)未知下标:O(n)

(3)未知下标但排序:根据二分法查找是O(logn)

(4)插入和删除时,为了保证在内存存储的连续性,需要数组元素,平均时间复杂度为O(n)

二.ArrayList

1.ArrayList的底层实现原理是什么?

(1)ArrayList底层是用动态的数组实现的。

(2)ArrayList创建时,若未指定容量,则初始化数组长度为0;第一次添加数据时才将数组长度扩容为10。

(3)后续的每次扩容,都将数组长度扩容为原来的1.5倍;每次扩容都需要将原数组元素拷贝到新数组。

(4)ArrayList在添加数据时:

        a.计算数组当前已存储容量size,若size+1>length,则调用grow()方法进行扩容(扩容为原来的1.5倍)。

        b.将新添加的数据存储到数组的size位置上,添加成功返回布尔值

2.ArrayList list = new ArrayList(10);代码中list扩容了几次?

(1)ArrayList有三种构造方法:

        a.ArrayList(int initialCapacity):带初始化容量的构造函数,将数组的容量初始化为initialCapacity;

        b.ArrayList():无参构造函数,数组容量初始化为0,第一次添加元素时才扩容为10;

        c.ArrayList(Collection<?extends E> c):将c转化为ArrayList
(2)代码中是使用了ArrayList的带初始化容量的构造函数,并未进行扩容。

3.如何实现数组和List之间的转换?

(1)数组转List:调用JDK中的工具类Arrays中的asList()方法。

(2)List转数组:调用List类中的toArray()方法。若toArray()方法不传参,则返回一个Object数组;若传入一个已经初始化长度的数组,则将List中的数据存到该数组并返回该数组。

4.通过Arrays.asList()将数组转List后,若修改数组内容,List会受影响吗?

(1)asList()的实现原理是通过Arrays类中的一个内部类ArrayList来将数组包装成一个ArrayList;

(2)asList()方法会将ArrayList中的数组指向传入的数组,再将ArrayList对象返回,以此来实现将数组转化成List。

(3)这个指向是一个引用传递,ArrayList的数组和传入的数组指向同一块地址,因此修改数组内容,List会受影响。

5.ArrayList 和 Arrays类的内部类Arrays.ArrayList的区别

(1)add方法

        a.ArrayList和Arrays.ArrayList都继承了抽象类AbstractList;

        b.AbstractList中的add()方法默认为若子类未重写该方法,则使用时会抛出UnsupportedOperationException异常

        c.ArrayList重写了add()方法,可以有添加元素操作

        d.Arrays.ArrayList未重写add()方法,无法添加元素

******e.由于Arrays.asList()返回的是Arrays.ArrayList对象,因此通过这种方式将数组转成的List是无法添加元素的。

(2)构造参数为数组或集合时

        a.ArrayList只能接收Collection

        b.Arrays.ArrayList能接收数组E[]

6.通过List类的toArray()将List转成数组后,若修改List内容,数组会受影响吗?

不会受影响,toArray()的实现原理是将List中的数组进行拷贝,并返回一个新数组对象。返回的数组与List中的数组不指向同一块地址,因此互不影响。

7.ArrayList和LinkedList的区别是什么?

1.底层数据结构

(1)ArrayList底层是用动态的数组实现的

(2)LinkedList底层是用双向链表实现的

2.操作数据的效率不同

(1)查

        a.已知索引的情况下,ArrayList根据寻址公式查找,效率是O(1);LnkedList是遍历查找,效率是O(n)。

        b.未知索引的情况下,ArrayList和LinkedList都是遍历查找,效率都是O(n)。

(2)增删

        a.ArrayList进行尾部增删效率是O(1),其他位置的增删都需要挪动数组,效率是O(n)。

        b.LinkedList进行头尾增删效率是O(1),其他位置的增删都需要遍历链表,效率是O(n)。

3.内存空间占用

(1)ArrayList底层是数组,在内存中是连续存储的,节省内存空间。

(2)LinkedList底层是双向链表,在内存中是离散存储的,还需额外存储前后两个节点的地址,更占用内存空间

4.线程安全

ArrayList和LinkedList都是线程不安全的,若要保证线程安全,有两种方案:

(1)在方法内定义使用,对于局部变量是线程安全的。

(2)使用Collections.synchronizedList(new ArrayList<>())或Collections.synchronizedList(new LinkedList<>())构建线程安全的List,该方法就是创建加了synchronized锁的List,线程安全但操作性能下降。

相关文章:

集合-1 数组ArrayListLinkedList

一.数组 1.什么是数组&#xff1f; 数组是一种用连续的内存空间存储相同类型数据的线性数据结构。 2.为什么数组下标是从0开始&#xff1f; &#xff08;1&#xff09;数组根据下标查找元素是基于寻址公式&#xff1a;元素地址数组首地址索引i*数组存储数据类型的大小 &am…...

42-1 应急响应之账户排查

一、用户信息排查 在服务器被入侵后,攻击者可能会建立相关账户(有时是隐藏或克隆账户),方便进行远程控制。攻击者会采用的方法主要有如下几种: 直接建立一个新的账户:攻击者直接创建一个新的账户,有时为了混淆视听,账户名称与系统常用名称相似。 激活一个系统中的默认…...

Python3 笔记:sort() 和 sorted() 的区别

1、sort() 可以对列表中的元素进行排序&#xff0c;会改变原列表&#xff0c;之前的顺序不复存在。 list.sort&#xff08;key&#xff0c; reverse None&#xff09; key&#xff1a;默认值是None&#xff0c;可指定项目进行排序&#xff0c;此参数可省略。 reverse&#…...

vue 引入 emoji 表情包

vue 引入 emoji 表情包 一、安装二、组件内使用 一、安装 npm install --save emoji-mart-vue二、组件内使用 import { Picker } from "emoji-mart-vue"; //引入组件<picker :include"[people,Smileys]" :showSearch"false" :showPreview&q…...

mysql 数据库 增量备份

mysql 数据库 增量备份 https://dev.mysql.com/doc/mysql-enterprise-backup/8.0/en/mysqlbackup.incremental.html 和版本 有关系啊 xtrabackup mysql增量备份与恢复使用详解 https://www.jb51.net/database/297844fzd.htm 存储 引擎 怎么看&#xff1f; 适用于MyISAM存储引…...

SpringBoot之@Builder 注解

&#xff08;1&#xff09;Builder 生成的构造器不是完美的&#xff0c;如果没有提供必须的参数&#xff0c;构造器可能会创建出不完整或者不合法的对象&#xff0c;导致代码报错。 Builder 注解产生的 Builder 类的构造方法默认并不能限定必传参数。 &#xff08;2&#xff…...

云计算的能源消耗如何影响环境?

嗨&#xff0c;亲爱的读者朋友们&#xff0c;今天我们要聊一聊云计算的能源消耗对环境的影响。随着科技的飞速发展&#xff0c;云计算已经成为了企业和个人处理数据的首选方式。但是&#xff0c;你可曾想过&#xff0c;这些“云”究竟消耗了多少能源&#xff0c;对我们的环境又…...

openwrt设置开机自启 tailscale为例

首先下载 tailscale 到 /root 目录下&#xff0c;并按照以下命令运行一次 /root/tailscale/tailscaled --state/root/tailscale/tailscaled.state & /root/tailscale/tailscale up &弹出登录地址并授权即可 创建一个启动脚本位置在/etc/init.d下 vim /etc/init.d/ta…...

副业树洞聊天项目/树洞倾诉/陪陪系统源码/树洞源码下载搭建

随着社会的发展和人们生活水平的提高&#xff0c;越来越多的人在面临心理压力、情感困扰或生活困境时&#xff0c;需要一个可以宣泄、倾诉和寻求支持的平台。而传统的人际交往方式往往会遇到难以排解的问题&#xff0c;比如担心被他人知晓自己的隐私等&#xff0c;这就导致了人…...

UWB论文:Introduction to Impulse Radio UWB Seamless Access Systems(2):脉冲;超宽带;测距;定位

3) 测距/接收器 像全球定位系统&#xff08;GPS&#xff09;这样的系统依赖于单向测距One Way Ranging&#xff08;OWR&#xff09;&#xff0c;其中多个卫星&#xff08;代表固定节点&#xff0c;称为锚点anchors&#xff09;定期传输同步的无线电数据包集合&#xff0c;这允许…...

Spring MVC/Web

1.Spring MVC 的介绍 Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;也是Spring框架的一部分。它提供了灵活可扩展的MVC架构&#xff0c;方便开发者构建高性能的Web应用程序&#xff0c;并与 Spring 生态系统无缝集成。 2.MVC 设计模式 MVC&#xff08;Model…...

C++中获取int最大与最小值(补)

上文中&#xff0c;我们学习了C中获取int最大与最小值的两种方法&#xff1a;C库和移位运算&#xff0c;这篇文章将解决在移位运算中遇到的各种报错&#xff0c;并提出一种新的生成int最值的方法 上文链接&#xff1a;http://t.csdnimg.cn/cn7Ad 移位运算取最值常见报错 Dev…...

一个开源的工具类轮子是怎么造出来的

心路历程 为什么要做 在22年9月的某一天&#xff0c;在公司开需求评审时&#xff0c;接到了一个给PDF、图片添加水印的需求。做为一个刚工作的CURD程序员&#xff0c;在遇到这些问题时&#xff0c;第一反应是去github上找找有没有类似的开源框架。但是&#xff0c;出乎我意料…...

零基础学Java第二十二天之迭代器 Iterator

迭代器 Iterator 的理解和相关集合 使用 1、理解 迭代器&#xff08;Iterator&#xff09;是设计模式中的一种&#xff0c;它允许程序员遍历容器&#xff08;例如列表、集合等&#xff09;中的元素&#xff0c;而无需了解容器底层的实现细节。在编程中&#xff0c;迭代器提供了…...

微服务架构-异步消息传递设计模式

微服务架构-异步消息传递设计模式 异步消息允许服务发送消息后立即返回&#xff0c;而不需要等待消息被处理完毕&#xff0c;这种异步方式可以大大提高系统的处理速度、和吞吐量。 微服务架构&#xff0c;通常涉及多个服务之间的相互调用&#xff0c;如果通信只是在少数几个微…...

基于SSM的大学生兼职管理系统

基于SSM的大学生兼职管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 企业界面 前台学生界面 管理员界面 摘要 随着大学生兼职市场的日益繁…...

leetcode刷题记录:前缀和

https://labuladong.online/algo/problem-set/perfix-sum/#%E8%A7%A3%E6%B3%95%E4%BB%A3%E7%A0%81-3 适用范围&#xff1a;快速、频繁地计算一个索引区间内的元素之和 303 区域和检索&#xff1a;数组不可变 https://leetcode.cn/problems/range-sum-query-immutable/ class …...

TENT: FULLY TEST-TIME ADAPTATION BY ENTROPY MINIMIZATION--论文笔记

论文笔记 资料 1.代码地址 https://github.com/DequanWang/tent 2.论文地址 https://arxiv.org/abs/2006.10726 1论文摘要的翻译 在这种完全测试时适应的情况下&#xff0c;模型只有测试数据和自身参数。我们建议通过测试熵最小化&#xff08;tent&#xff09;进行适应&…...

Java期末复习指南(1):知识点总结+思维导图,考试速成!

&#x1f516;面向对象 &#x1f4d6; Java作为面向对象的编程语言&#xff0c;我们首先必须要了解类和对象的概念&#xff0c;本章的所有内容和知识都是围绕类和对象展开的&#xff01; ▐ 思维导图1 ▐ 类和对象的概念 • 简单来说&#xff0c;类就是对具有相同特征的一类事…...

OpenMV学习笔记1——IDE安装与起步

目录 一、OpenMV IDE下载 二、OpenMV界面 三、Hello World&#xff01; 四、将代码烧录到OpenMV实现脱机运行 五、插SD卡&#xff08;为什么买的时候没送&#xff1f;&#xff09; 一、OpenMV IDE下载 浏览器搜索OpenMV官网&#xff0c;进入后点击“立即下载”&#xff0…...

高效构建个性化Obsidian知识管理系统:从模板到实践的全面指南

高效构建个性化Obsidian知识管理系统&#xff1a;从模板到实践的全面指南 【免费下载链接】kepano-obsidian My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in. 项目地址: https://gitcode.com/gh_mirro…...

构建企业级AI客服系统:从知识库集成到无缝转人工的实战指南

1. 企业级AI客服系统架构设计 第一次搭建AI客服系统时&#xff0c;我犯了个典型错误——直接调用大模型API就开始开发前端界面。结果上线后才发现&#xff0c;当用户量超过50人时响应速度直线下降&#xff0c;转人工功能更是形同虚设。这个教训让我明白&#xff0c;企业级系统必…...

mT5分类增强版中文-base效果惊艳:同一输入生成‘正式/口语/幽默’三风格文本示例

mT5分类增强版中文-base效果惊艳&#xff1a;同一输入生成‘正式/口语/幽默’三风格文本示例 1. 模型介绍&#xff1a;零样本学习的文本增强利器 mT5分类增强版中文-base是一个基于mT5架构的文本增强模型&#xff0c;专门针对中文场景进行了深度优化。这个模型最大的特点是采…...

OpenClaw成本优化方案:Qwen3.5-9B-AWQ-4bit自部署省下80%Token

OpenClaw成本优化方案&#xff1a;Qwen3.5-9B-AWQ-4bit自部署省下80%Token 1. 为什么需要关注OpenClaw的Token消耗 第一次用OpenClaw完成图片处理任务时&#xff0c;我的信用卡账单给我上了深刻的一课——单月API调用费用直接突破2000元。这个数字让我意识到&#xff1a;如果…...

实战演练:基于快马平台开发结合openclaw配置模型的工业分拣模拟系统

最近在做一个工业分拣系统的模拟项目&#xff0c;尝试用openclaw配置模型来实现对不同形状物体的智能抓取。整个过程在InsCode(快马)平台上完成&#xff0c;发现这个工具特别适合快速搭建这类机器人控制原型。记录下具体实现过程&#xff1a; 场景搭建 首先用三维引擎创建了一个…...

Windows 10 PL-2303串口驱动终极修复指南:告别老旧芯片兼容性问题

Windows 10 PL-2303串口驱动终极修复指南&#xff1a;告别老旧芯片兼容性问题 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 还在为Windows 10系统下PL-2303串口适配器…...

VS2015+C++实战:手把手教你用海康MVS里的Demo搞定多相机同步采图与保存

VS2015C实战&#xff1a;海康MVS工业相机多机同步采图全流程解析 工业视觉检测系统中&#xff0c;多相机同步采图是个经典需求。上周帮朋友调试8台海康威视相机组成的检测线时&#xff0c;发现网上完整案例实在太少。今天我就以VS2015开发环境为例&#xff0c;带大家深入MVS安装…...

模型蒸馏与量化:为什么大厂急需能把大模型跑在边缘端的SDE?

在2026年的北美科技求职市场中&#xff0c;人工智能的下半场战役已经悄然转移了阵地。当行业内绝大多数求职者还在简历上堆砌“熟练调用大语言模型API”或“基于LangChain构建应用”时&#xff0c;北美头部科技公司&#xff08;如Apple、Google、Meta&#xff09;的招聘重心已经…...

告别单调闪烁!用GD32F303的TIMER高级功能玩转PWM:实现S形曲线呼吸灯与多灯同步效果

解锁GD32F303定时器高阶玩法&#xff1a;S形曲线PWM与多灯协同控制艺术 呼吸灯效果在嵌入式设备中早已司空见惯&#xff0c;但大多数实现仍停留在简单的线性渐变阶段。当LED亮度以恒定速率变化时&#xff0c;人眼会感知到明显的"机械感"——就像早期数字音乐缺少模拟…...

2025版等级保护测评报告模板:风险导向与合规深化的实践指南

1. 2025版等级保护测评报告模板的核心变革 如果你最近接触过等级保护测评工作&#xff0c;一定会注意到2025版报告模板带来的显著变化。这个版本最大的特点就是从过去的"得分导向"彻底转向了"风险导向"。在实际工作中&#xff0c;我发现很多企业安全负责人…...