【JAVA】List接口

🏆今日学习目标:List接口
😃创作者:颜颜yan_
✨个人主页:颜颜yan_的个人主页
⏰本期期数:第四期
🎉专栏系列:JAVA
List接口
- 一、ArrayList
- 二、LinkedList
- 总结
一、ArrayList
ArrayList是 List 接口的一个实现类,它是程序中最常见的一种集合。 ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,Array List 会在内存中分配一个更大的数组来存储这些元素,因此可以将 ArrayList 看作一个长度可变的数组。ArrayList 的元素插人过程如图。

Array List 的大部分方法是从父类 Collection 和List 继承的,其中add()方法和get()方法分别用于实现元素的存入和取出。下面通过一个案例介绍 Array List 的元素存取。
import java.util.*;
public class Main {public static void main(String[] args) {ArrayList list = new ArrayList<>(); //创建集合list.add("张三"); //向集合添加元素list.add("李四");list.add("王五");list.add("马六");//获取集合中元素的个数System.out.println("集合的长度:"+list.size());//取出并打印指定位置的元素System.out.println("第三个元素是:"+list.get(2));//删除索引为3的元素list.remove(3);System.out.println("删除索引为3的元素:"+list);//将索引为1 的元素替换为李四2list.set(1,"李四2");System.out.println("替换索引为1的元素为李四2:"+list);}
}
在上述代码中,创建了 ArrayList 对象list,代码通过 list对象调用add( Object o)方法添加了4个元素,通过 list对象调用 size()方法获取集合中元素的个数并输出,使用 list 对象调用 get(方法获取索引为 1 的元素并输出,删除 list 对象素引为 了的元素并输出;删除后的list 对象,最后代码替换 list 对象中索引为 1的元素为"李四 2"并输出。
运行结果如下图:

从图可以看出,素引为 1 的元素是集合中的第2个元素,这就说明集合和数组一样,索引的取值范围是从0开始的,最后一个素引是集合大小减 1。在访问元素时一定要注意索引不可超出此范围,否则程序会抛出素引越界异常 。
由于 ArrayList 的底层是使用一个数组存储元素,在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此 Arraylist 集合不适合做大量的增删操作,而适合元素的查找。
二、LinkedList
上面节中讲解的 ArrayList 在查询元素时速度很快,但在增删元素时效率较低。为了克服这种局限性,可以使用 List 接口的另一个实现类-LinkedList。LinkedList内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式记录它的前一个元素和后一个素,从而可以将所有的元素彼此连按起来。当插人一个新元素时,只需要修改元素之可的引用关系即可;删除一个节点也是如此。正因为 Linkedlist 具有这样的存储结构,所以其增删效率非常高。LinkedList 添加元素和删除元素的过程如图所示:

上图中的实线箭头表示建立新的引用关系,虚线箭头表示删除引用关系。左图为添加元素,元素 1和元素2在集合中为前后关系,在它们之间新增一个元素时,只需要让元素 1记录它后面的元素为新元素,让元素 2记录它前面的元素为新元素。
右图为删除元素,要想删除元素 1与元素2之间的元素 3,只需要让元素 1 与元素 2变成前后引用关系
针对元素的添加、删除和获取操作,LinkedList 定义了一些特有的方法,如下表
| 方法声明 | 功能描述 |
|---|---|
| void add(int index,E element) | 在当前集合的索引index处插入元素element |
| void addFirst(Object o) | 将指定元素o插入前集合的开头 |
| void addList(Object o) | 将指定元素o添加前集合的开将结尾 |
| Object getFirst() | 返回当前集合的第一个元素 |
| Object getLast() | 返回当前集合的最后一个元素 |
| Object removeFirst() | 移除并返回当前集合的第一个元素 |
| Object removeLast() | 移除并返回当前集合的最后一个元素 |
| boolean offer(Object o) | 将指定元素o添加到当前集合的结尾 |
| boolean offerFirst(Object o) | 将指定元素o添加到当前集合的开头 |
| boolean offerLast(Object o) | 将指定元素o添加到当前集合的结尾 |
| Object peekFirst() | 获取当前集合的第一个元素 |
| Object peekLast() | 获取当前集合的最后一个元素 |
| Object pollFirst() | 移除并返回当前集合的第一个元素 |
| Object pollLast() | 移除并返回当前集合的最后一个元素 |
| void push(Object o) | 将指定元素o添加到当前集合的开头 |
表列出的方法主要用手对集合中的元素进行添加、删除和获取操作。下面通过一个案例来接受这些方法的使用
import java.util.*;
public class Main {public static void main(String[] args) {LinkedList link = new LinkedList(); //创建集合link.add("张三"); //向集合添加元素link.add("李四");link.add("王五");link.add("马六");System.out.println(link.toString()); //获取集合中元素的个数link.add(3,"Student"); //向集合中索引为3出插入元素Studentlink.addFirst("First"); //向集合的第一个位置插入FirstSystem.out.println(link);System.out.println(link.getFirst()); //取出集合中的第一个元素link.remove(3); //移除集合中索引为3的元素link.removeFirst(); //移除集合中的第一个元素System.out.println(link);}
}
在上述代码中,创建了一个 LinkedList 集合,并且在集合中存人4个元素,通过调用add()和 addFirst()方法分别在集合中索引为3的位置和第一个位置(索引为 0)插人元素,然后通过调用remove()和 removeFirst()方法将集合中索引为 3 和0的元素移除。这样就完成了元素的增删操作。
运行结果如图所示:

总结
以上就是今天的学习内容啦~
如果有兴趣的话可以订阅专栏,持续更新呢~
咱们下期再见~

相关文章:
【JAVA】List接口
🏆今日学习目标:List接口 😃创作者:颜颜yan_ ✨个人主页:颜颜yan_的个人主页 ⏰本期期数:第四期 🎉专栏系列:JAVA List接口一、ArrayList二、LinkedList总结一、ArrayList ArrayLis…...
Hbase RegionServer的核心模块
RegionServer是HBase系统中最核心的组件,主要负责用户数据写入、读取等基础操作。RegionServer组件实际上是一个综合体系,包含多个各司其职的核心模块:HLog、MemStore、HFile以及BlockCache。 一、RegionServer内部结构 RegionServer是HBas…...
【Java开发】JUC进阶 01:Lock锁详解
1 Lock锁介绍已经在【JUC基础】04简单介绍过了,本文做进一步的拓展,比如公平锁和非公平锁、📌 明白锁的核心四个对象:线程,共享资源,锁,锁操作包括线程如何操作资源,使用锁锁哪个资源…...
关于登录校验的解决方案以及原理(回顾知识点)--项目开发那点事(自问自答版本)
开始前奏: 嘻嘻😄 通常一个完整的系统,需要安全性的保证。如登录校验,登录成功后,才可以访问服务资源。在服务端渲染项目中,我们通常使用 session来进行登录校验。在前后端分离的场景中,很多时…...
【数据结构】邻接矩阵和邻接图的遍历
写在前面 本篇文章开始学习数据结构的图的相关知识,涉及的基本概念还是很多的。本文的行文思路:学习图的基本概念学习图的存储结构——本文主要介绍邻接矩阵和邻接表对每种结构进行深度优先遍历和广度优先遍历先识概念话不多说,狠活献上学习思想等等&…...
设计跳表(动态设置节点高度)
最近学习redis的zset时候,又看到跳表的思想,突然对跳表的设置有了新的思考 这是19年设计的跳表,在leetcode的执行时间是200ms 现在我对跳表有了新的想法 1、跳表的设计,类似二分查找,但是不是二分查找,比较…...
基于神经辐射场(Neural Radiance Fileds, NeRF)的三维重建- 简介(1)
Nerf简介 Nerf(neural Radiance Fileds) 为2020年ICCV上提出的一个基于隐式表达的三维重建方法,使用2D的 Posed Imageds 来生成(表达)复杂的三维场景。现在越来越多的研究人员开始关注这个潜力巨大的领域,也…...
【AI面试】NMS 与 Soft NMS 的辨析
往期文章: AI/CV面试,直达目录汇总【AI面试】L1 loss、L2 loss和Smooth L1 Loss,L1正则化和L2正则化 一、NMS 非极大值抑制(Non-Maximum Suppression,NMS),并不是深度学习时期,目标…...
一文让你彻底理解Linux内核多线程(互斥锁、条件变量、读写锁、自旋锁、信号量)
一、互斥锁(同步) 在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着打印机打印东西的同时(还没有打印完),别人刚好也在…...
利用python写一个gui小公举--环境搭建
文章目录背景搭建环境安装必要库添加工具快捷方式检验背景 在实习过程中遇到一个问题,某项目是通过python代码实现的,而且需要一直修改参数实现功能,过程有些繁琐。虽然师兄用PHP study搭了一个网站用于查看结果,但是还是过于繁琐…...
英飞凌Tricore实战系列02_ENDINIT属性看门狗原理及应用
目录 1.概述2.ENDINIT功能及使用2.1 ENDINIT属性2.2 改写受ENDINIT保护寄存器的步骤3. Tricore 看门狗介绍及使用3.1 看门狗系统介绍3.1.1 安全看门狗介绍3.1.2 CPU看门狗介绍3.2 看门狗模式介绍3.2.1 Time-out模式3.2.2 正常模式(Normal Mode)3.2.3 禁用模式(Disabled Mode…...
Java Number类
Java Number 类是一个抽象类,它是所有数字类的基类。Java 中的数字类包括 Byte、Short、Integer、Long、Float 和 Double,它们都继承自 Number 类。Java Number 类提供了一些常用的方法,可以用于将数字类型转换为不同的格式,以及进…...
C++构造和析构
欢迎来观看温柔了岁月.c的博客 目前 设有C学习专栏 C语言项目专栏 数据结构与算法专栏 目前主要更新C学习专栏,C语言项目专栏不定时更新 待C专栏完毕,会陆续更新C项目专栏和数据结构与算法专栏 一周主要三更,星期三,星期五&#x…...
docker安装即docker连接mysql(window)
一 安装docker 1.什么是docker Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 2.WSL2 WSL,即Windows Subsystem on Linux,中…...
HMM-维特比算法
HMM-维特比算法(viterbi)HMM回顾隐马科夫链解法:维特比算法(Viterbi)HMM回顾 最终的公式可以解释主要分为两个部分: P(xi|yi),发射概率,字面意思是从一个词性中发射/生成出某一个单…...
【C++初阶】2. 类和对象_1
1. 面向过程和面向对象的初步认识 2. 类的引入 C语言结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。比如: 之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量&#…...
kotlin把函数作为参数转递给另一个函数
kotlin把函数作为参数转递给另一个函数 fun say(s: String, foo: (String) -> Unit) {print("hello")foo(s) }fun hi(str: String) {println(str) }fun main(args: Array<String>) {say("hello", ::hi) } 输出: hellohello...
海思嵌入式开发-005-OpenHarmony源码编译问题
海思嵌入式开发-005-OpenHarmony源码编译问题一、问题描述二、解决方案2.1解决原理2.2获取OpenHarmony 3.1.1 Release源码2.3最后解决问题,编译成功。一、问题描述 按照链接拉取master源码,出现如下问题,打开build.log文件 提示相应位置的文…...
指针的进阶续(笔试题强化练习)
写在前面:在上次我们学习了指针的相关类型的知识,对指针家族的成员基本有了了解,这次让我们跟着一些题目来练习和补充一些知识,这有助于我们强化理解这些知识。 话不多说,我们马上开始: 1.指针和数组的笔…...
一个供参考的计算机的学习路线
本文是介绍如何成为一个Geek,一个真正的计算机高手。 适合有成为IT领域技术大牛的人参考。 写给大一新生和所有向深耕IT领域的人,避免走一些弯路。 仅代表个人想法,供批判性参考。 第一门入门的必备功课-语法与算法 什么是计算机?…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
