进阶JAVA篇-深入了解 List 系列集合
目录
1.0 List 类的说明
1.1 List 类的常用方法
1.2 List 集合的遍历方式
2.0 ArrayList 集合的底层原理
2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因:
2.2 ArrayList 集合的优缺点
3.0 LinkedList 集合的底层原理
3.1 从 LinkedList 集合的底层原理来了解具有该特性的原因:
3.2 LinkedList 集合的优缺点
3.3 LinkedList 集合的特有方法
1.0 List 类的说明
在 Java 中,List 类是 Java 集合框架中的一种接口,它是一种有序的、可重复的集合,用于存储多个元素。List 接口是 Collection 接口的子接口,它定义了一系列方法来操作和访问列表中的元素,所以 List 接口继承了 Collection 接口的方法。
有关的 Collection 接口的常用 API 介绍在以下链接:
进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式-CSDN博客
1.1 List 类的常用方法
以代码的形式来介绍这些方法:
import java.util.ArrayList; import java.util.List;public class Text_List {public static void main(String[] args) {//由于 List 是一个接口,不能直接去创建对象,//所以用 List 的实现类来创建一个对象,比如 ArrayListList<String> list = new ArrayList<>();//这是一行经典的代码!!!list.add("张三");list.add("李四");list.add("王五");System.out.println(list);//输出结果为:[张三, 李四, 王五]//1. add(index, element):在指定位置插入一个元素。list.add(1,"张麻子");System.out.println(list);//输出结果为:[张三, 张麻子, 李四, 王五]//2. remove(index):移除并返回指定位置的元素。list.remove(1);System.out.println(list);//输出结果为:[张三, 李四, 王五]//3. set(index, element):将指定位置的元素替换为新的元素。list.set(1,"张麻子");System.out.println(list);//输出结果为:[张三, 张麻子, 王五]//4. get(index):返回指定位置的元素。String a = list.get(1);System.out.println(a);//输出结果为:张麻子} }
运行结果为:
1.2 List 集合的遍历方式
除了 List 系列集合继承 Collcetion类的三个遍历方式之外,还支持普通的带索引的 for 循环。
有关的 Collection 类的三个遍历方式的介绍在以下链接:
进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式-CSDN博客
由于 List 系列集合支持支持有序的,所以可以使用普通带索引的 for 循环。
代码如下:
import java.util.ArrayList; import java.util.List;public class Text_List {public static void main(String[] args) {List<String> list = new ArrayList<>();//这是一行经典的代码!!!!list.add("张三");list.add("李四");list.add("王五");System.out.println(list);//用普通的 for 循环来遍历以上集合for (int i = 0; i < list.size(); i++) {String a = list.get(i);System.out.println(a);}} }
运行结果如下:
2.0 ArrayList 集合的底层原理
由于 ArrayList 是 List 的实现类,所以 ArrayList 特性与 List 接口是一致的,有序、可重复、有索引的特性。
2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因:
ArrayList 集合是基于数组实现的,简单来说,ArrayList 集合就是一个可变长度的数组。因此可以解释为什么 ArrayList 集合具有有序、可重复、有索引的特性,是因为数组都具备这些特性。
创建的 ArrayList 集合的对象在底层的过程:
import java.util.ArrayList; import java.util.List;public class Text_List {public static void main(String[] args) {//首先,利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组List<String> list = new ArrayList<>();//这是一行经典的代码!!!!//当添加第一个元素的时候,会创建一个新的默认长度为10的数组list.add("a");} }
需要注意的是:
1. 假如数组存满的时候会创建一个新的已扩容1.5倍的数组,然后将原来旧的数组里面的数据,迁移到新的已扩容的数组中来。
2. 如果一次添加多个元素,1.5倍还是放不下,则新创建数组的长度以实际为准。
2.2 ArrayList 集合的优缺点
因为 ArrayList 是基于数组实现的,所以可以根据数组的特性来了解该集合的优缺点,由于数组是支持索引查找元素的,所以该集合的优点是很明显,查找元素特别的快。但是对于增添、删除、修改的操作来说是很慢的。
所以 ArrayList 适合:根据索引查询数据。不适合:频繁对元素进行操作。
3.0 LinkedList 集合的底层原理
由于 LinkedList 是 List 的实现类,所以 LinkedList 特性与 List 接口是一致的,有序、可重复、有索引的特性,但是与 ArrayList 在底层的原理是不一样的。
3.1 从 LinkedList 集合的底层原理来了解具有该特性的原因:
LinkedList 集合是基于双链表实现的。
简答介绍以下双链表:
链表中的每一个节点都是独立的对象,也就是说内存不是连续的,每一个节点都包含记录上一个节点的地址还有下一个节点的地址、数值。
3.2 LinkedList 集合的优缺点
根据该集合的数据结构为双链表,每查询一个元素是从头或者尾一步一步地去查询的,而不能直接去找到其中的元素,所以查询是很慢的。对于增加、删除、修改元素的速度相对来说是快的。但是有两个节点很特殊,对于头、尾节点无论查询还是增加、删除、修改元素速度都很快的。
所以 LinkedList 集合适合:频繁对元素操作的。不合适:大量的查找元素。
3.3 LinkedList 集合的特有方法
以代码的形式来介绍:
import java.util.LinkedList; public class Text_LinkedList {public static void main(String[] args) {LinkedList<String> list = new LinkedList<>();list.add("张三");list.add("李四");list.add("王五");System.out.println(list);//输出结果为:[张三, 李四, 王五]//1. addFirst() :在该列表开头插入指定的元素list.addFirst("王麻子");System.out.println(list);//输出结果为:[王麻子, 张三, 李四, 王五]//2. addLast() :将指定的元素追加到此列表的末尾list.addLast("张麻子");System.out.println(list);//输出结果为:[王麻子, 张三, 李四, 王五, 张麻子]//3. getFirst() :返回此列表中的第一个元素String a = list.getFirst();System.out.println(a);//输出结果为:王麻子//4. getLast() :返回此列表中的最后一个元素String b = list.getLast();System.out.println(b);//输出结果为:张麻子//5. removeFirst() :从此列表中删除并返回第一个元素list.removeFirst();System.out.println(list);//输出结果为:[张三, 李四, 王五, 张麻子]//6. removeLast() :从此列表中删除并返回最后一个元素list.removeLast();System.out.println(list);//输出结果为:[张三, 李四, 王五]} }
运行结果如下:
根据 LinkedList 集合的数据结构的特性,其应用场景可以是用设计队列(先进先出,后进后出),还可以用来设计栈(先进后出,后进先出)。
相关文章:

进阶JAVA篇-深入了解 List 系列集合
目录 1.0 List 类的说明 1.1 List 类的常用方法 1.2 List 集合的遍历方式 2.0 ArrayList 集合的底层原理 2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因: 2.2 ArrayList 集合的优缺点 3.0 LinkedList 集合的底层原理 3.1 从 LinkedList 集合的底层原理来了…...
typeof 与 instanceof 区别
typeof 和 instanceof 是 JavaScript 中用于检测数据类型的运算符,它们在使用和功能上有一些区别。 typeof 运算符: typeof 运算符用于检测给定值的数据类型,返回一个表示数据类型的字符串。typeof 可以用于检测基本数据类型(如字符串、数字、布尔值)和函数,也可以用于检…...

python 之计算矩阵乘法
文章目录 总的介绍例子 总的介绍 np.matmul 是NumPy库中的矩阵乘法函数,用于执行矩阵乘法操作。矩阵乘法是线性代数中的一种常见操作,用于将两个矩阵相乘以生成新的矩阵。在神经网络、机器学习和科学计算中,矩阵乘法经常用于变换和组合数据。…...

【Linux】进程优先级|进程并发概念|在vim中批量化注释
文章目录 前言tips——如何在vim中批量化注释进程更深度理解一、什么是进程优先级二、 为什么要有优先级三、Linux怎么设置优先级查看进程优先级的命令PRI and NI用top命令更改已存在进程的nice: 如何根据优先级开展调度呢?五、其他概念并发(…...

高效使用python之xlwt库编辑写入excel表内容
头条号:科雷软件测试 学习目录 了解下电脑中的excel表格文件格式 安装xlwt库 xlwt库写入表格内容 1 导入xlwt库 2 用一个图展示下xlwt常用的函数 3 往表格写入一些内容并保存 4 设置样式 1 先初始化XFStyle 2 设置字体font 3 设置边框 4 设置对齐方式 …...

【前端】Layui小功能收集整理
目录 1、layui 鼠标悬浮提示文字 2、关闭当前窗口并刷新父页面 3、子iframe关闭/传值/刷新父页面 1、layui 鼠标悬浮提示文字 鼠标放在图标上悬浮显示提示信息,效果图如下 <div style"float:left; line-height:40px">道试题 <i class"l…...

Django 地址接口开发
应用 Mixin 混合类进行收货地址接口开发 python ../manage.py startapp address继承了mixins扩展类,进到里面可以稍微看下源码 该方法帮我们实现了获取验证及保存的功能 address/views from rest_framework.generics import GenericAPIView from rest_framewo…...

.net6部署到linux上(CentOS Linux 7)
目录 一、先在linux上配置.net环境 添加 Microsoft 包存储库 安装 SDK 安装运行时 检查 SDK 版本可使用终端查看当前安装的 .NET SDK 版本。 打开终端并运行以下命令。 二、创建.net6 mvc项目 并发布 创建项目 修改默认端口 打包发布到文件夹 运行打包项目查看项目是否…...

docsify搭建个人博客——简单公共知识库
整站建设流程:安装docsify > 排错>配置封面> 配搜索> 启动> 放md类的文章> 自动生成目录; 更新文章流程: 把目录文章放到docsify\docs目录下,然后双击docsify-autosidebar.exe即可(它会重新生成目录…...

Ubuntu18.04如何安装搜狗、网易云音乐、百度网盘、金山WPS、谷歌浏览器、微信、Maven、Pycharm、Anaconda、MySQL8.0等软件
目录 1.搜狗输入法 下载 安装 卸载 2.网易云音乐 下载 安装 3.百度网盘 下载 安装 4.金山WPS 下载 安装 5.谷歌浏览器 下载 安装 6.微信 下载安装 7.Maven 下载 安装 配置镜像源 8.Pycharm 下载 安装 9.Anaconda 下载 安装 卸载 10.MySQL8.0 下载…...

【算法练习Day24】递增子序列全排列全排列 II
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 递增子序列容易出错的地方 …...
web3之链上情报平台Arkham
文章目录 web3之链上情报平台Arkham什么是Arkham链上情报交易所 Arkham Intel Exchange相较于传统情报交易方式,Arkham Intel Exchange下优势 web3之链上情报平台Arkham 什么是Arkham 官网:https://zh.arkhamintelligence.com/ 官方:https://platform.…...

浅谈uniapp中开发安卓原生插件
其实官方文档介绍的比较清楚而且详细,但是有时候他太墨迹,你一下子找不到自己想要的,所以我总结了一下开发的提纲,也是为了自己方便下次使用。 1.第一步,下载官方提供的Android的示例工程,然后倒入UniPlugin-Hello-AS工程请在App离线SDK中查找,之后Android studio,编译运行项目…...
音频格式WAV
查找wav文件头关键struct 位置,当然也可查找avi文件头。用这个方法找到avi文件data位置后,可直接读出文件的每一帧图片。当然avi数据的标志位不是data,可以是00dc等。 WAV音频头文件有三个关键struct:RIFF, fmt,data。 AVI 视频文件头的关键…...

《语音优先》智能语音技术驱动的交互界面设计与语音机器人设计(译者序)...
“言为心声,语为心境”,语言与对话是我们沟通与协作的重要方式。而智能语音技术是一种基于人工智能和自然语言处理技术的语音交互技术。它可以通过语音识别技术将用户的语音指令转换为文本,然后通过自然语言处理技术对文本进行分析和理解,最终…...

[SQL开发笔记]WHERE子句 : 用于提取满足指定条件的记录
SELECT DISTINCT语句用户返回列表的唯一值:这是一个很特定的条件,假设我需要考虑很多中限制条件进行查询呢?这时我们就可以使用WHERE子句进行条件的限定 一、功能描述: WHERE子句用于提取满足指定条件的记录; 二、WH…...

【微信小程序】6天精准入门(第5天:利用案例与后台的数据交互)附源码
一、什么是后台交互? 在小程序中,与后台交互指的是小程序前端与后台服务器之间的数据通信和请求处理过程。通过与后台交互,小程序能够获取服务器端的数据、上传用户数据、发送请求等。 小程序与后台交互可以实现数据的传输、用户认证、实时消…...

【Hydro】水文模型比较框架MARRMoT - 包含47个概念水文模型的Matlab代码
目录 说明源代码运行实例workflow_example_1.mworkflow_example_2.mworkflow_example_3.mworkflow_example_4.m 测试1、 结构体兼容性问题2、append的兼容性问题3、修改后的MARRMoT_model.m 说明 MARRMoT是一个新的水文模型比较框架,允许不同概念水文模型结构之间的…...

Android Studio(2022.3.1)设置阿里云源-新旧版本
新版本 #settings.gradle.ktsmaven { url uri("https://maven.aliyun.com/repository/public/") }maven { url uri("https://maven.aliyun.com/repository/google/") }maven { url uri("https://maven.aliyun.com/repository/jcenter/") }ma…...

SOLIDWORKS 2024新功能 3D CAD三维机械设计10大新功能
SOLIDWORKS 2024新增功能 - 3D CAD三维机械设计 10大新增功能 1. 先前版本的兼容性 •利用您订阅的 SOLIDWORKS,可将您的 SOLIDWORKS 设计作品保存为旧版本,与使用旧版本 SOLIDWORKS 的供应商无缝协作。 •可将零件、装配体和工程图保存为最新版本…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...