java集合进阶篇-《List集合》
个人主页→VON
收录专栏→java从入门到起飞
目录
编辑
一、前言
二、List集合简要概述
三、List集合主要函数的应用
四、List集合的遍历
五、思考
一、前言
List集合与Collection集合的相同之处还是挺多的,不过有些小细节又不太一样,其中有一个挺有意思的地方,就是删除元素的那个地方,希望能够给大家讲明白。最近更新速度可能会特别的慢,希望大家多多理解。
二、List集合简要概述
在Java中,List 是一种常用的集合类型,它允许存储任意类型的对象,并且提供了按照插入顺序来维护元素的有序集合。List 接口是 Java 集合框架的一部分,定义了可以用于任何列表实现的一组方法。List 的主要实现包括 ArrayList、LinkedList 和 Vector(以及它的子类 Stack),每种实现都有其特定的性能特点和使用场景。
-
ArrayList:实现了可变大小的数组,它允许在列表中间进行快速随机访问,但是插入和删除操作(特别是在列表的中间位置)会相对较慢,因为这需要重新分配数组的大小并移动元素。
-
LinkedList:使用双向链表来存储元素,这意味着它可以在 O(1) 时间复杂度内插入或删除元素,但是访问元素的速度比 ArrayList 慢,因为它需要从头开始遍历直到找到目标节点。
-
Vector:类似于 ArrayList,但是 Vector 中的方法是同步的(synchronized),这意味着它是线程安全的,可以用于多线程环境。然而,由于同步带来的性能开销,Vector 在非同步环境中通常不如 ArrayList 性能好。
除了这些基本的实现之外,还有一些常见的视图类,比如 Collections.unmodifiableList() 返回一个不可修改的列表,这样可以创建只读的数据结构。
List 接口提供了一系列方法来操作列表中的元素,例如添加(add())、删除(remove())、查找(get())、替换(set())等。此外,还有 size() 方法来获取列表中元素的数量,以及 isEmpty() 方法来检查列表是否为空等等。
使用 List 集合时,可以根据具体的应用需求选择最适合的实现方式。例如,如果你需要频繁地插入和删除元素,那么 LinkedList 可能是最好的选择;如果你需要频繁地访问列表中的元素并且不太关心插入和删除的效率,那么 ArrayList 将是一个更好的选择。
三、List集合主要函数的应用
package ArrayDemo.ListDemo;import java.util.ArrayList;
import java.util.List;public class A01_ListDemo01 {public static void main(String[] args) {// 1.创建集合并添加元素List<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");// 2.打印集合System.out.println(list);// [a, b, c, d, e]// 3.在集合中指定位置添加元素// void add(int index,E element)// 原来索引上的元素会依次后移list.add(2,"aaa");System.out.println(list);// [a, b, aaa, c, d, e]// 4.删除指定索引的元素,返回被删除的元素// E remove(int index)list.remove(1);System.out.println(list);// [a, aaa, c, d, e]// 5.修改指定位置的元素,返回被修改的元素// E set(int index, E element)list.set(1,"bbb");System.out.println(list);// [a, bbb, c, d, e]// 6.返回指定索引处的元素// E get(int index)System.out.println(list.get(2));// c}
}
list集合中主要用到的函数就这么几个,需要注意的地方我都已经添加了注释,希望大家能够更好的去理解。
四、List集合的遍历
package ArrayDemo.ListDemo;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;public class A03_ListDemo03 {public static void main(String[] args) {/*List集合的五种遍历方式:1.迭代器2.列表迭代器3.增强for4.Lambda表达式5.普通for循环*/// 1.创建集合并添加元素List<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");list.add("f");// 2.迭代器Iterator<String> it = list.iterator();while(it.hasNext()){System.out.println(it.next());}System.out.println("---------------------------------");// 3.列表迭代器// 获取一个列表迭代器对象,里面的指针也是默认从0开始的// 额外添加了一个方法:在遍历的过程中,可以添加元素ListIterator<String> it1 = list.listIterator();while(it1.hasNext()){String str = it1.next();if("b".equals(str)){it1.add("aaa");}}System.out.println(list);System.out.println("---------------------------------");// 4.增强forfor (String s : list) {System.out.println(s);}System.out.println("---------------------------------");// 5.Lambda表达式// forEash方法的底层其实就是一个循环遍历,依次得到集合中的每一个元素// 并把集合中的元素传递给accept方法list.forEach(s-> System.out.println(s));System.out.println("---------------------------------");// 6.普通for循环for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}System.out.println("---------------------------------");}
}

说句不好听的,我个人感觉熟练运用一种就可以了,从我的角度出发,我感觉增强for循环挺好用的,毕竟for循环用的比较多,所以对for情有独钟。
五、思考

不知道大家有没有思考过这个问题,如果集合中全都是数字,应该怎样去删除这个元素呢?
应该都能看到remove的源码中传入的参数是index,所以会优先根据下标进行删除。

解决方法:

相关文章:
java集合进阶篇-《List集合》
个人主页→VON 收录专栏→java从入门到起飞 目录 编辑 一、前言 二、List集合简要概述 三、List集合主要函数的应用 四、List集合的遍历 五、思考 一、前言 List集合与Collection集合的相同之处还是挺多的,不过有些小细节又不太一样,其中有一个…...
FPGA图像处理之均值滤波
文章目录 一、什么是图像滤波?1.1 噪声类型1.2 滤波类型 二、均值滤波原理2.1 3*3窗口滑动过程2.2 图像扩展 三、Matlab实现均值滤波四、FPGA实现均值滤波4.1 生成 3*3 矩阵4.2 仿真3*3矩阵4.3 计算均值4.4 仿真均值滤波 一、什么是图像滤波? 图像滤波是…...
高等数学 6.2 定积分在几何学上的应用
文章目录 一、平面图形的面积1.直角坐标情形2.极坐标情形 二、体积1.旋转体体积2.平行截面面积为已知的立体的体积 三、平面曲线的弧长 一、平面图形的面积 1.直角坐标情形 我们已经知道,由曲线 y f ( x ) ( f ( x ) ⩾ 0 ) y f(x) (f(x) \geqslant 0) yf(x)(f…...
缓存常见问题:缓存穿透、雪崩、击穿及解决方案分析
1. 什么是缓存穿透,怎么解决? 缓存穿透是指用户请求的数据在缓存中不存在即没有命中,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据,会导致短时…...
C++:拷贝构造
拷贝构造函数是参数类型为本类的引用的构造函数,它也叫复制构造函数,它只有一个参数。当没有写拷贝构造函数时,会有一个默认的拷贝构造函数。 class AA { public:AA(AA& ra){}} 那么什么时候会调用此函数呢?有以下三种情况 …...
BGP(边界网关协议)
1、网络AS(自治系统) 边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。 AS是指在一个实体管辖下的拥有…...
Spring 概念汇总
一、Spring中的依赖注入和依赖反转 依赖注入(Dependency Injection) 概念 依赖注入是一种设计模式,它允许在对象创建时将其依赖的对象传递给它,而不是让对象自己去创建或查找依赖对象。在Spring中,依赖注入是控制反转…...
快速在找到函数的实体的方法
当我们写了许多许多的函数,那我们怎么快速的找到他们呢 我们只需要按下ctrl,在点击函数名字就可以快速的找到我们想要的函数...
05 django管理系统 - 部门管理 - 修改部门
04我们已经实现了新增部门的功能,下面开始修改部门模块的实现。 按道理来说,应该是做成弹框样式的,通过ajax悄咪咪的发数据,然后更新前端数据,但是考虑到实际情况,先用页面跳转的方式实现,后面…...
C++初阶——入门
目录 1、C发展历史 2、C版本更新 3、C参考文档 4、C书籍推荐 5、C的程序 6、命名空间 6.1 namespace的作用 6.2 namespace的定义 6.3 namespace的使用 7、C输入&输出 8、缺省参数 9、函数重载 10、引用 10.1 引用的概念和定义 10.2 引用的特性 10.3 引用的使…...
Java基于SSM微信小程序物流仓库管理系统设计与实现(源码+lw+数据库+讲解等)
选题背景 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…...
82.【C语言】数据结构之顺序表的初始化和销毁
目录 1.线性表 2.分类 1.静态顺序表:使用定长数组存储元素 代码示例(写入Seqlist.h中) 2.动态顺序表:使用与动态内存管理有关的函数 代码示例(写入Seqlist.h中) 补:数据管理的四个需求:增改删查 3.操作顺序表 1.初始化顺序表 1.不开辟空间 2.开辟空间 1…...
java-推荐一个控制台输出颜色ANSI字符的类
java-推荐一个控制台输出颜色ANSI字符的类 背景代码调用输出 背景 这个类是来自hive的一段代码,大家可以参考一下,这个类名是ColorBuffer 代码 /** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreem…...
关于定义结构体别名时 是否加*
在C语言中,使用typedef来定义结构体类型及其指针的别名时,Node和LinkList的声明方式有所不同,这是因为你对它们的目的和用途有不同的设定。 首先,看一下你的代码: typedef struct { int data; int lenght; // 注意&am…...
成语积累学习
识文断字:有一点文化知识 雨后春笋:春雨过后快速生长的竹笋;比喻大量涌现的新生事物 味同嚼蜡:如同咀嚼白蜡一样,毫无味道。形容文章或言辞枯燥乏味。 差强人意:大体上让人满意 八面玲珑:处…...
基于Java的茶叶商城设计与实现(源码+定制+开发)茶叶电商系统开发、茶叶电商平台开发、茶叶在线销售平台设计与开发
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
桥接、NAT和仅主机三种网络模式对虚拟机IP地址分配的影响
在虚拟机中,桥接、NAT和仅主机(Host-Only)这三种网络模式会给虚拟机带来不同的IP地址分配方式及相应的网络连接特性,从而产生不同的影响,具体如下: 桥接模式 IP地址分配特点:在桥接模式下&…...
音乐播放器-0.专栏介绍
1.简介 本专栏使用Qt QWidget作为显示界面,你将会学习到以下内容: 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放,音乐歌词文件加载,展示。 6.播放器界面换肤。 相信学习了本专栏…...
单月变现3W!AI助力沙雕图文爆红小绿书,12篇阅读量破10万+!
最近有没有小伙伴注意到,在各大社交平台上,那些温馨治愈、搞笑沙雕的图文内容,能吸引大量的目光和流量,不久前,我也曾分享过这类内容,比如让人眼前一亮的人间清醒老奶奶,她的图文就属于这类流行…...
C语言复习第4章 数组
目录 一、一维数组的创建和初始化1.1数组的创建1.2 变长数组1.3 数组的初始化1.4 全局数组默认初始化为01.5 区分两种字符数组1.6 用sizeof计算数组元素个数1.7 如何访问数组元素1.8 一维数组在内存中的存储(连续存储)1.9 访问数组元素的另一种方式:指针变量1.10 数组越界是运行…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

