当前位置: 首页 > news >正文

【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接口

&#x1f3c6;今日学习目标&#xff1a;List接口 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰本期期数&#xff1a;第四期 &#x1f389;专栏系列&#xff1a;JAVA List接口一、ArrayList二、LinkedList总结一、ArrayList ArrayLis…...

Hbase RegionServer的核心模块

RegionServer是HBase系统中最核心的组件&#xff0c;主要负责用户数据写入、读取等基础操作。RegionServer组件实际上是一个综合体系&#xff0c;包含多个各司其职的核心模块&#xff1a;HLog、MemStore、HFile以及BlockCache。 一、RegionServer内部结构 RegionServer是HBas…...

【Java开发】JUC进阶 01:Lock锁详解

1 Lock锁介绍已经在【JUC基础】04简单介绍过了&#xff0c;本文做进一步的拓展&#xff0c;比如公平锁和非公平锁、&#x1f4cc; 明白锁的核心四个对象&#xff1a;线程&#xff0c;共享资源&#xff0c;锁&#xff0c;锁操作包括线程如何操作资源&#xff0c;使用锁锁哪个资源…...

关于登录校验的解决方案以及原理(回顾知识点)--项目开发那点事(自问自答版本)

开始前奏&#xff1a; 嘻嘻&#x1f604; 通常一个完整的系统&#xff0c;需要安全性的保证。如登录校验&#xff0c;登录成功后&#xff0c;才可以访问服务资源。在服务端渲染项目中&#xff0c;我们通常使用 session来进行登录校验。在前后端分离的场景中&#xff0c;很多时…...

【数据结构】邻接矩阵和邻接图的遍历

写在前面 本篇文章开始学习数据结构的图的相关知识&#xff0c;涉及的基本概念还是很多的。本文的行文思路:学习图的基本概念学习图的存储结构——本文主要介绍邻接矩阵和邻接表对每种结构进行深度优先遍历和广度优先遍历先识概念话不多说&#xff0c;狠活献上学习思想等等&…...

设计跳表(动态设置节点高度)

最近学习redis的zset时候&#xff0c;又看到跳表的思想&#xff0c;突然对跳表的设置有了新的思考 这是19年设计的跳表&#xff0c;在leetcode的执行时间是200ms 现在我对跳表有了新的想法 1、跳表的设计&#xff0c;类似二分查找&#xff0c;但是不是二分查找&#xff0c;比较…...

基于神经辐射场(Neural Radiance Fileds, NeRF)的三维重建- 简介(1)

Nerf简介 Nerf&#xff08;neural Radiance Fileds&#xff09; 为2020年ICCV上提出的一个基于隐式表达的三维重建方法&#xff0c;使用2D的 Posed Imageds 来生成&#xff08;表达&#xff09;复杂的三维场景。现在越来越多的研究人员开始关注这个潜力巨大的领域&#xff0c;也…...

【AI面试】NMS 与 Soft NMS 的辨析

往期文章&#xff1a; AI/CV面试&#xff0c;直达目录汇总【AI面试】L1 loss、L2 loss和Smooth L1 Loss&#xff0c;L1正则化和L2正则化 一、NMS 非极大值抑制&#xff08;Non-Maximum Suppression&#xff0c;NMS&#xff09;&#xff0c;并不是深度学习时期&#xff0c;目标…...

一文让你彻底理解Linux内核多线程(互斥锁、条件变量、读写锁、自旋锁、信号量)

一、互斥锁&#xff08;同步&#xff09; 在多任务操作系统中&#xff0c;同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于&#xff0c;公司部门里&#xff0c;我在使用着打印机打印东西的同时&#xff08;还没有打印完&#xff09;&#xff0c;别人刚好也在…...

利用python写一个gui小公举--环境搭建

文章目录背景搭建环境安装必要库添加工具快捷方式检验背景 在实习过程中遇到一个问题&#xff0c;某项目是通过python代码实现的&#xff0c;而且需要一直修改参数实现功能&#xff0c;过程有些繁琐。虽然师兄用PHP study搭了一个网站用于查看结果&#xff0c;但是还是过于繁琐…...

英飞凌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 类是一个抽象类&#xff0c;它是所有数字类的基类。Java 中的数字类包括 Byte、Short、Integer、Long、Float 和 Double&#xff0c;它们都继承自 Number 类。Java Number 类提供了一些常用的方法&#xff0c;可以用于将数字类型转换为不同的格式&#xff0c;以及进…...

C++构造和析构

欢迎来观看温柔了岁月.c的博客 目前 设有C学习专栏 C语言项目专栏 数据结构与算法专栏 目前主要更新C学习专栏&#xff0c;C语言项目专栏不定时更新 待C专栏完毕&#xff0c;会陆续更新C项目专栏和数据结构与算法专栏 一周主要三更&#xff0c;星期三&#xff0c;星期五&#x…...

docker安装即docker连接mysql(window)

一 安装docker 1.什么是docker Docker容器与虚拟机类似&#xff0c;但二者在原理上不同。容器是将操作系统层虚拟化&#xff0c;虚拟机则是虚拟化硬件&#xff0c;因此容器更具有便携性、高效地利用服务器。 2.WSL2 WSL&#xff0c;即Windows Subsystem on Linux&#xff0c;中…...

HMM-维特比算法

HMM-维特比算法&#xff08;viterbi&#xff09;HMM回顾隐马科夫链解法&#xff1a;维特比算法&#xff08;Viterbi&#xff09;HMM回顾 最终的公式可以解释主要分为两个部分&#xff1a; P(xi|yi)&#xff0c;发射概率&#xff0c;字面意思是从一个词性中发射/生成出某一个单…...

【C++初阶】2. 类和对象_1

1. 面向过程和面向对象的初步认识 2. 类的引入 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a; 之前在数据结构初阶中&#xff0c;用C语言方式实现的栈&#xff0c;结构体中只能定义变量&#…...

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) } 输出&#xff1a; hellohello...

海思嵌入式开发-005-OpenHarmony源码编译问题

海思嵌入式开发-005-OpenHarmony源码编译问题一、问题描述二、解决方案2.1解决原理2.2获取OpenHarmony 3.1.1 Release源码2.3最后解决问题&#xff0c;编译成功。一、问题描述 按照链接拉取master源码&#xff0c;出现如下问题&#xff0c;打开build.log文件 提示相应位置的文…...

指针的进阶续(笔试题强化练习)

写在前面&#xff1a;在上次我们学习了指针的相关类型的知识&#xff0c;对指针家族的成员基本有了了解&#xff0c;这次让我们跟着一些题目来练习和补充一些知识&#xff0c;这有助于我们强化理解这些知识。 话不多说&#xff0c;我们马上开始&#xff1a; 1.指针和数组的笔…...

一个供参考的计算机的学习路线

本文是介绍如何成为一个Geek&#xff0c;一个真正的计算机高手。 适合有成为IT领域技术大牛的人参考。 写给大一新生和所有向深耕IT领域的人&#xff0c;避免走一些弯路。 仅代表个人想法&#xff0c;供批判性参考。 第一门入门的必备功课-语法与算法 什么是计算机&#xff1f…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...