进阶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 的供应商无缝协作。 •可将零件、装配体和工程图保存为最新版本…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...



