Java基础之List实现类
文章目录
- 一、基本介绍
- 二、常见方法
- 三、ArrayList注意事项
- 四、ArrayList底层结构
- 我的理解
- 五、ArrayList扩容机制
- 无参构造器
- 有参构造器
- 六、LinkedList
- 介绍
- 底层操作机制
- 七、ArrayList 与 LinkedList
- ArrayList
- LinkedList
tip:以下是正文部分
一、基本介绍
List集合类中元素有序(即添加顺序和取出顺序一致)、且可重复
List集合中的每个元素都有其对应的顺序索引,即支持索引。
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
二、常见方法
Object set(int index, Object ele):设置指定index位置的元素为ele相当于是替换。
List subList(int fromIndex, int tolndex):返回从fromIndex到tolndex位置的子集合
左闭右开
三、ArrayList注意事项
1、ArrayList 可以加入null,并且多个
2、ArrayList 是由数组来实现数据存储的
3、ArrayList 基本等同于Vector,除了 ArrayList是线程不安全(执行效率高) ,在多线程情况下,不建议使用ArrayList
四、ArrayList底层结构
1、ArrayList中维护了一个Object类型的数组elementData.
transient Obiect[l elementData;
2、当创建对象时,如果使用的是无参构造器,则初始elementData容量为0(idk7是10)当添加元素时:否则直接添加元先判断是否需要扩容,如果需要扩容,则调用grow方法
3、当添加元素时:否则直接添加元先判断是否需要扩容,如果需要扩容,则调用grow方法,否则直接添加元素到合适位置
4、如果使用的是无参构造器,如果第一次添加,需要扩容的话,则扩容elementData为10如果需要再次扩容的话,则扩容elementData为1.5倍。
5、如果使用的是指定容量capacity的构造器则初始elementData容量为capacity
6、如果使用的是指定容量capacity的构造器如果需要扩容,则直接扩容elementData为1.5倍。
我的理解
1.在new ArrayList时,先创建了一个空的elementData数组,类型为Object
2.在添加元素时会先比较当前list的大小和elementData数组大小,判断是否需要扩容
3.如果需要扩容则,返回一个数组,并将内容copy回去。
五、ArrayList扩容机制
无参构造器
elementData容量为0,第1次添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍。
有参构造器
如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容则直接扩容elementData为1.5倍。
六、LinkedList
介绍
1、LinkedList实现了双向链表和双端队列特点
2、可以添加任意元素(元素可以重复),包括null
3、线程不安全,没有实现同步
底层操作机制
1、LinkedList底层维护了一个双向链表.
2、LinkedList中维护了两个属性first和last分别指向 首节点和尾节点
3、每个节点(Node对象),里面又维护了prev、next、item三个属性,其中通过prev指向前一个,通过next指向后一个节点。最终实现双向链表.
4、LinkedList的元素的添加和删除,不是通过数组完成的,相对来说效率较高。
@SuppressWarnings({"all"})
public class Main {public static void main(String[] args) {Node node1 = new Node("a");Node node2 = new Node("b");Node node3 = new Node("c");node1.next = node2;node2.next = node3;node3.pre = node2;node2.pre = node1;Node frist = node1;Node end = node3;//node1 node2 node3 成为双向链表}
}
@SuppressWarnings({"all"})
class Node {String value;Node next, pre;public Node(String value) {this.value = value;}
}
七、ArrayList 与 LinkedList
ArrayList
底层结构 : 可变数组
增删效率较低
改查效率较高
LinkedList
底层结构:双向链表
增删效率较高
改查效率较低
相关文章:
Java基础之List实现类
文章目录 一、基本介绍二、常见方法三、ArrayList注意事项四、ArrayList底层结构我的理解 五、ArrayList扩容机制无参构造器有参构造器 六、LinkedList介绍底层操作机制 七、ArrayList 与 LinkedListArrayListLinkedList tip:以下是正文部分 一、基本介绍 List集合…...
java List接口介绍
List 是 Java 集合框架中的一个接口,它继承自 Collection 接口,代表一个有序的元素集合。List 允许重复的元素,并且可以通过索引来访问元素。Java 提供了多种 List 的实现,如 ArrayList、LinkedList、Vector 和 CopyOnWriteArrayList。 List接口概述 List 接口提供了一些…...
调度器APScheduler定时执行任务
APScheduler(Advanced Python Scheduler)是一个Python库,用于调度任务,使其在预定的时间间隔或特定时间点执行。它支持多种调度方式,包括定时(interval)、日期(date)和Cr…...
git合并分支的疑问
今天遇到一个奇怪的问题: 1、后端从master拉了三个分支。分别为dev、test、和stage。 2、研发1从dev拉了分支feature1,然后commit、commit、commit……。最后request merge到dev、test和stage。成功了。 3、研发2从dev拉了分支feature2,注意,feature2…...
catia数控加工仿真Productlist无法添加部件或零件
这种情况是没有把NCSetup显示 在工具中勾选即可...
关于Pycharm右下角不显示解释器interpreter的问题解决
关于Pycharm右下角不显示解释器interpreter的问题 在安装新的Pycharm后,发现右下角的 interpreter 的选型消失了: 觉得还挺不习惯的,于是网上找解决办法,无果。 自己摸索了一番后,发现解决办法如下: 勾…...
为什么word生成的PDF内容显示不全?
在现代办公环境中,将文档从一个格式转换为另一个格式是一个常见的任务。然而,有时候我们可能会遇到意想不到的问题,比如使用Word转换成PDF时,生成的PDF文件只显示了整个界面的四分之一内容。这种问题不仅令人困扰,也可…...
JVM专题十三:总结与整理(持续更新)
图解JVM JVM与Java体系结构 JVM垃圾回收算法 JVM垃圾回收器 图解JVM主要是放了前面12个章节的我们给大家画的图,做了整体的汇总,大家可以根据图区回忆我们所说的内容,查缺补漏。 实战经验 1、项目中数据量多少,QPS与TPS最高多少…...
MobPush iOS端海外推送最佳实现
推送注册 在AppDelegate里进行SDK初始化(也可以在Info.plist文件中进行AppKey,AppSecret的配置)并对通知功能进行注册以及设置推送的环境和切换海外服务器等,参考如下步骤代码: <span style"background-colo…...
商家团购app微信小程序模板
手机微信商家团购小程序页面,商家订餐外卖小程序前端模板下载。包含:团购主页、购物车订餐页面、我的订单、个人主页等。 商家团购app微信小程序模板...
探索AudioLM:音频生成技术的未来
目录 2. AudioLM的基础理论 2.1. 音频生成的基本概念 2.2. 语言模型在音频生成中的应用 2.3. 深度学习在音频生成中的作用 3. AudioLM的架构与实现 3.1. AudioLM的基本架构 3.1.1 编码器 3.1.2 解码器 3.1.3 生成模块 3.2. 训练过程 3.2.1 数据预处理 3.2.2 损失函…...
计算机视觉:深入了解图像分类、目标检测和图像分割的核心技术
计算机视觉是什么? 计算机视觉是一门致力于让计算机“看懂”图像和视频的技术,它旨在通过模拟人类视觉系统来理解和解释数字化视觉信息。这一领域涉及图像的获取、处理、分析和理解,最终用于从视觉数据中提取有用信息并做出决策。计算机视觉的…...
Django 安装 Zinnia 后出现故障
在Django中安装和配置Zinnia时遇到故障可能有多种原因,通常包括版本兼容性、依赖关系或配置问题。这里提供一些常见的解决方法和调试步骤,帮助大家解决问题。 首先,确保您安装的Zinnia版本与Django版本兼容。查看Zinnia的官方文档或GitHub页…...
.net 8 集成 MinIO文件存储服务,实现bucket管理,以及文件对象的基本操作
一、准备工作 1、本地部署MinIO服务 2、创建MinIO的Access Key 3、创建.net 项目 4、下载MinIO sdk 5、相关文档 二、编写MinIO工具类 三、管理存储桶 1、MyBucket类 (1)判断bucket是否存在 (2)新建bucket (…...
Three.js机器人与星系动态场景:实现3D渲染与交互式控制
内容摘要:使用Three.js库构建了一个交互式的3D场景。组件中创建了一个机器人模型,包括头部、眼睛、触角、身体和四肢,以及两个相同的机器人实例以实现动态效果。场景中还加入了粒子效果,模拟星系环境,增强了视觉效果。…...
Android系统集成和使用FFmpeg
文章目录 前言FFmpeg源码下载交叉编译NDK下载x264编译源码下载编译 FFmpeg编译脚本 AOSP继承FFmpeg 前言 原生AOSP中并未继承FFmpeg,所以要想在android上使用,需要自己编译集成。 FFmpeg源码下载 git clone https://git.ffmpeg.org/ffmpeg.git目前最新…...
水果商城外卖微信小程序模板
手机微信水果外卖,水果电商,水果商城网页小程序模板。包含:主页、列表页、详情页、购物车、个人中心。 水果商城外卖小程序模板...
【前端】面试八股文——输入URL到页面展示的过程
【前端】面试八股文——输入URL到页面展示的过程 1. DNS解析 当用户在浏览器中输入URL并按下回车时,首先需要将域名转换为IP地址,这个过程称为DNS(域名系统)解析。具体步骤如下: 浏览器缓存:浏览器首先检…...
什么是应用安全态势管理 (ASPM):综合指南
软件开发在不断发展,应用程序安全也必须随之发展。 传统的应用程序安全解决方案无法跟上当今开发人员的工作方式或攻击者的工作方式。 我们需要一种新的应用程序安全方法,而ASPM在该方法中发挥着关键作用。 什么是 ASPM? 应用程序安全…...
认识100种电路之耦合电路
在电子电路的世界中,耦合电路宛如一座精巧的桥梁,连接着各个功能模块,发挥着至关重要的作用。 【为什么电路需要耦合】 在复杂的电子系统中,不同的电路模块往往需要协同工作,以实现特定的功能。然而,这些模…...
嵌入式Python库CI/CD实战:Travis CI自动化测试与发布
1. 项目概述与核心价值 如果你正在维护一个开源项目,或者在一个小团队里负责核心模块的开发,那么你一定对“这次改动会不会把别人的代码搞坏”这个问题感到头疼。尤其是在嵌入式开发领域,比如我们常用的CircuitPython库,代码最终要…...
别再手动导数据了!用Python的pandas+pyarrow,3行代码搞定Parquet转JSON
3行代码解锁数据自由:用Python极简实现Parquet到JSON的优雅转换 数据工程师的日常总是与格式转换纠缠不清。当你在凌晨两点收到紧急需求:"立刻把数据仓库里50GB的用户行为Parquet文件转成JSON供下游系统调用",是选择打开文档逐行编…...
深度解析网易游戏NPK文件解包:从二进制迷宫到资源提取的完整实战指南
深度解析网易游戏NPK文件解包:从二进制迷宫到资源提取的完整实战指南 【免费下载链接】unnpk 解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。 项目地址: https://gitcode.com/gh_mirrors/un/unnpk 你是否曾经好奇网易热门游戏如《阴阳师》…...
GenAIScript:用脚本化AI工作流提升代码生成效率与工程化实践
1. 项目概述:当AI遇上代码生成,GenAIScript带来了什么?如果你最近在关注AI如何改变开发工作流,特别是微软在AI领域的动作,那么microsoft/genaiscript这个项目绝对值得你花时间深入研究。这不仅仅是一个简单的代码生成工…...
Git Hooks与代码质量左移:self-review工具实战指南
1. 项目概述:从“自我审查”到“代码质量守护者”最近在GitHub上看到一个挺有意思的项目,叫motiful/self-review。光看名字,你可能会觉得这又是一个关于代码审查流程或者团队协作规范的工具。但点进去仔细研究后,我发现它的定位非…...
5分钟快速上手Tesseract OCR:从零开始掌握开源文字识别技术
5分钟快速上手Tesseract OCR:从零开始掌握开源文字识别技术 【免费下载链接】tesseract Tesseract Open Source OCR Engine (main repository) 项目地址: https://gitcode.com/gh_mirrors/tes/tesseract 你是否曾经需要从图片中提取文字,却苦于没…...
如何掌握Node.js模块系统:Node.js-Design-Patterns-Third-Edition深度解析
如何掌握Node.js模块系统:Node.js-Design-Patterns-Third-Edition深度解析 【免费下载链接】Node.js-Design-Patterns-Third-Edition Node.js Design Patterns Third Edition, published by Packt 项目地址: https://gitcode.com/gh_mirrors/no/Node.js-Design-Pa…...
STM32CubeMX+STM32CubeIDE:STM32G030F6P6TR的免费开发生态入门
STM32G030F6P6TR:超值型Cortex-M0 MCU如何以最小封装实现64MHz性能突破在嵌入式系统设计中,“性价比”往往意味着在某些关键指标上的妥协——更小的封装通常伴随更低的主频或更少的外设。然而,STM32G0系列的推出打破了这一行业惯例。STM32G03…...
DeepSeek MMLU成绩暴涨11.2分的秘密武器:不是更大参数,而是这个被顶会论文雪藏2年的校准框架(附开源复现代码)
更多请点击: https://intelliparadigm.com 第一章:DeepSeek MMLU成绩暴涨11.2分的实证现象 近期,DeepSeek-R1 在大规模多任务语言理解(MMLU)基准测试中取得显著突破——其零样本准确率从 72.3% 提升至 83.5%ÿ…...
英特尔®oneAPI 数学内核库(oneMKL)在Windows上的高效部署与VS2022集成指南
1. 为什么选择oneMKL?从矩阵计算到AI加速的全能选手 第一次接触oneMKL是在处理一个图像处理项目时,当时需要实现大规模的矩阵变换运算。用原生C写的算法跑起来像老牛拉车,直到同事推荐了英特尔的这个数学库。实测下来,同样的算法…...
