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种电路之耦合电路
在电子电路的世界中,耦合电路宛如一座精巧的桥梁,连接着各个功能模块,发挥着至关重要的作用。 【为什么电路需要耦合】 在复杂的电子系统中,不同的电路模块往往需要协同工作,以实现特定的功能。然而,这些模…...
2026年GPT-5.4实战应用完全指南
2026 年 3 月 OpenAI 发布的 GPT-5.4,是 AI 从对话工具转向自动化执行代理的里程碑产品,凭借原生计算机操控、百万 Token 上下文、Excel 深度集成、强推理编程四大核心突破,覆盖企业、专家、讲师、管理者、主播、电商、小白七类人群ÿ…...
2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟题)
2026年全国青少年信息素养大赛算法应用主题赛(C赛项初赛模拟题) 一、单项选择题(共 15 题,每题 5 分) 1. 数组下标与长征物资 题目内容 你需要记录红军某运输队一周(7 天)的粮食消耗量&#x…...
重构鼠标潜能:Mac Mouse Fix全场景优化指南
重构鼠标潜能:Mac Mouse Fix全场景优化指南 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是一款开源工具,专为解决m…...
Fire Dynamics Simulator:火灾动力学模拟的技术原理与工程应用
Fire Dynamics Simulator:火灾动力学模拟的技术原理与工程应用 【免费下载链接】fds Fire Dynamics Simulator 项目地址: https://gitcode.com/gh_mirrors/fd/fds 火灾作为一种复杂的物理化学过程,其模拟需要精确捕捉流体流动、热传递和化学反应等…...
终极Mermaid在线编辑器指南:3分钟学会专业图表制作
终极Mermaid在线编辑器指南:3分钟学会专业图表制作 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor …...
别再踩坑了!Vue3项目里用rtsp2web搞定大华相机直播流的保姆级配置
Vue3与大华相机RTSP流集成实战:从避坑到高稳定直播方案 大华相机的RTSP流在Vue3项目中集成时,开发者常会遇到跨域、解码失败、黑屏等问题。本文将深入剖析这些痛点,提供一套经过验证的高稳定性解决方案。 1. 环境准备与核心工具链 在开始集成…...
告别百度云!手把手教你从Keil官网下载安装STM32全系列芯片支持包(附离线包备份技巧)
从Keil官网高效获取STM32芯片支持包的完整指南 为什么需要直接从Keil官网获取芯片支持包 在嵌入式开发领域,STM32系列微控制器因其出色的性能和丰富的生态系统而广受欢迎。然而,许多开发者在搭建开发环境时,往往习惯于从第三方网盘获取Keil M…...
【PAT甲级真题】- Shopping in Mars (25)
题目来源 Shopping in Mars (25) 题目描述点击链接自行查看 注意点: 输出时按照区间左端点从小到大输出 思路简介 简单的滑动窗口 我做了一个小处理 因为题目实际上要求找的是大于等于目标值的区间 所以移动左指针的条件写成 l>r&&sum>m 这样我认…...
HUST计组实验通关秘籍:手把手教你搞定单总线CPU的定长指令周期与三级时序
HUST计组实验通关秘籍:单总线CPU定长指令周期与三级时序全解析 实验前的认知准备 第一次接触单总线CPU设计实验的同学,往往会被"定长指令周期"和"三级时序"这些专业术语吓到。其实换个角度想,这就像搭积木——只不过我们…...
墨语灵犀在操作系统概念教学中的应用:交互式问答与示例生成
墨语灵犀在操作系统概念教学中的应用:交互式问答与示例生成 操作系统课程,对于很多计算机专业的学生来说,就像一座横亘在面前的高山。进程、线程、死锁、内存分页……这些抽象的概念,常常让初学者感到困惑和枯燥。传统的教学方式…...
