进阶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 的供应商无缝协作。 •可将零件、装配体和工程图保存为最新版本…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...