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

【Java数据结构】详解LinkedList与链表(四)

🔒文章目录:

1.❤️❤️前言~🥳🎉🎉🎉

2.什么是LinkedList 

3.LinkedList的使用

3.1LinkedList的构造方法

3.2LinkedList的其他常用方法介绍  

addAll方法 

subList方法 

LinkedList的常用方法总使用

 3.3 LinkedList的遍历

 println打印 

for-each遍历 

迭代器遍历 

4.ArrayList和LinkedList的区别

5.总结


1.❤️❤️前言~🥳🎉🎉🎉

Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。

如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的内容感兴趣,记得关注我👀👀以便不错过每一篇精彩。

当然,如果在阅读中发现任何问题或疑问,我非常欢迎你在评论区留言指正🗨️🗨️。让我们共同努力,一起进步!

加油,一起CHIN UP!💪💪

🔗个人主页:E绵绵的博客
📚所属专栏:

1. JAVA知识点专栏

        深入探索JAVA的核心概念与技术细节

2.JAVA题目练习

        实战演练,巩固JAVA编程技能

3.c语言知识点专栏

        揭示c语言的底层逻辑与高级特性

4.c语言题目练习

        挑战自我,提升c语言编程能力

📘 持续更新中,敬请期待❤️❤️

2.什么是LinkedList 

LinkedList的底层是无头双向非循环链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。

3.LinkedList的使用

3.1LinkedList的构造方法

 public LinkedList() {}

这是第一个构造方法,在这个构造函数中,没有任何参数或代码,因此它的作用是创建一个空的链表对象。如果在创建LinkedList对象时不提供任何参数,那么就会默认调用这个构造函数。

public LinkedList(Collection<? extends E> c) {this();addAll(c);}

这是Java中LinkedList类的第二个构造函数。它接受一个集合作为参数,并将该集合的所有元素添加到新创建的LinkedList中。

构造函数的第一行this()调用了默认构造函数,它会创建一个空的LinkedList对象。然后,addAll方法将集合c中的元素全部添加到新创建的LinkedList对象中。

由于这个构造函数接受的是一个Collection类型的参数,因此可以传入任何实现了Collection接口的类的对象。

并且因为该构造函数还使用了<? extends E>,它表示传递给构造函数的集合c中的<元素类型>必须是E或E的子类。

3.2LinkedList的其他常用方法介绍  

这里我们重点讲两个方法:一个是addAll方法,另一个是subList方法。其他方法都很简单,没必要讲。

addAll方法 

addAll方法:

LinkedList中的addAll方法是将另一个集合c中的所有元素尾插到该对象中。

其中有以下要求:

参数c要求是实现了Collection接口的对象

传递给构造函数的集合c中的<元素类型>必须是E或E的子类。

subList方法 

LinkedList中的subList方法用于获取原链表的一个子链表。它接受两个参数,分别是起始索引(fromindex)和结束索引(toindex),其左闭右开。一个新的List对象,包含原链表中指定范围内的元素。

subList方法返回的子链表在原链表的内部,对子链表的修改会反映到原链表上,反之亦然。

需要注意的是,如果有一个链表此时存在一个子链表,现在将该链表结构性修改(如添加或删除元素),之后再用println打印子链表,会导致ConcurrentModificationException异常抛出。这是因为结构性修改改变了原链表的大小,从而也破坏了其子链表的大小,所以打印子链表时就报错。(内容牵涉到了迭代器,这里就不细讲)

LinkedList的常用方法总使用

public class Test {public static void main(String[] args) {LinkedList<String>  linkedList=new LinkedList<>();linkedList.add("hello");linkedList.add(0,"world");linkedList.add(0,"Are");System.out.println(linkedList);System.out.println(linkedList.get(0));linkedList.set(2,"am");linkedList.remove(0);linkedList.remove("world");System.out.println(linkedList);System.out.println(linkedList.contains("am"));linkedList.add("sit");linkedList.add("am");System.out.println(linkedList.lastIndexOf("am"));System.out.println(linkedList.indexOf("am"));System.out.println(linkedList);List<String> list=linkedList.subList(0,2);linkedList.set(0,"she");System.out.println(list);linkedList.clear();System.out.println(linkedList);
}}

 3.3 LinkedList的遍历

 println打印 

由上图可知我们的ArrayList的父类重写了toString方法。所以我们可以用println打印出该LinkedList对象内部的所有元素,以字符串形式打印出来。

例如,如果LinkedList对象中有三个元素 “apple”、“banana” 和 “orange”,那么调用println方法将打印出字符串 “[apple, banana, orange]”。

for-each遍历 

在这先提前说个知识点,for-each循环适用于数组, collection类及collection的子类。

所以我们可以用它遍历LinkedLIst类,(LinkedList类是Collection的子类)。注意我们是从下标0开始遍历。

   LinkedList<String> linkedList1=new LinkedList<>();linkedList1.add("hello");linkedList1.add("hel");linkedList1.add("he");linkedList1.add("hell");for ( String s: linkedList1) {System.out.print(s+"  ");}


ArrayList(顺序表)也是同理可以用for-each进行遍历,顺序表文章中已经讲过该点。

迭代器遍历 

对于迭代器遍历我们现在还没学到迭代器,所以只需要记住代码就ok了,不用知道原理。 

 使 用 迭 代 器 遍 历 - - - 正 向 遍 历

LinkedList<String> linkedList2=new LinkedList<>();linkedList2.add("hello");linkedList2.add("hel");linkedList2.add("he");linkedList2.add("hell");ListIterator<String> it=linkedList2.listIterator();while(it.hasNext()) {System.out.print(it.next() + " ");}

使 用 反 向 迭 代 器 - - - 反 向 遍 历

LinkedList<String> linkedList2=new LinkedList<>();linkedList2.add("hello");linkedList2.add("hel");linkedList2.add("he");linkedList2.add("hell");ListIterator<String> it=linkedList2.listIterator(linkedList2.size());while(it.hasPrevious()) {System.out.print(it.previous() + " ");}

4.ArrayList和LinkedList的区别



两者的区别如上图所示,这里就不再多说了。 

5.总结 

所以我们的链表篇章现在就正式结束啦!下篇将给大家带来栈和队列的介绍。在此,我们诚挚地邀请各位大佬们为我们点赞、关注,并在评论区留下您宝贵的意见与建议。让我们共同学习,共同进步,为知识的海洋增添更多宝贵的财富!🎉🎉🎉❤️❤️💕💕🥳👏👏👏

相关文章:

【Java数据结构】详解LinkedList与链表(四)

&#x1f512;文章目录&#xff1a; 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.什么是LinkedList 3.LinkedList的使用 3.1LinkedList的构造方法 3.2LinkedList的其他常用方法介绍 addAll方法 subList方法 LinkedList的常用方法总使…...

ssm汉服文化平台网站

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

如何让 LightRoom 每次导入照片后不自动弹出 SD 卡 LR

如何让 LightRoom 每次导入照片后不自动弹出 SD 卡 LR 在导入窗口左上角有个选项&#xff1a; 导入后弹出 把这个去掉就可以了...

elasticdump和ESM

逐个执行如下命令&#xff1b; 1.拷贝analyzer如分词&#xff08;需要分词器&#xff0c;可能不成功&#xff0c;不影响复制&#xff09; ./elasticdump --inputhttp://[来源IP地址]:9200/[来源索引] --outputhttp://[目标IP地址]:9200/[目标索引] --typeanalyzer 2.拷贝映射…...

Java扩展机制:SPI与Spring.factories详解

一、SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不…...

iPhone 语言编程:深入探索与无限可能

iPhone 语言编程&#xff1a;深入探索与无限可能 在数字化时代的浪潮中&#xff0c;iPhone 作为一款全球领先的智能手机&#xff0c;其语言编程的奥秘一直吸引着众多开发者与爱好者的目光。iPhone 的语言编程不仅关乎技术实现&#xff0c;更涉及到用户体验、创新应用等多个层面…...

css动态导航栏鼠标悬停特效

charset "utf-8"; /*科e互联特效基本框架CSS*/ body, ul, dl, dd, dt, ol, li, p, h1, h2, h3, h4, h5, h6, textarea, form, select, fieldset, table, td, div, input {margin:0;padding:0;-webkit-text-size-adjust: none} h1, h2, h3, h4, h5, h6{font-size:12px…...

Vue中使用axios先获取头像上传参数然后上传图片到服务器-demo

这是一个使用axios发送POST请求上传图片到AWS S3的代码。其中&#xff1a; 引入了axios、FormData和fs模块&#xff1b;创建FormData实例&#xff0c;向其中添加上传图片的相关信息&#xff1b;创建axios请求的配置对象config&#xff0c;包含url、method、headers和data等属性…...

Win11环境下Android Studio中Flutter开发环境构建(逐步解决)

flutter开发环境构建 1. Flutter开发环境搭建1.1 Android Studio1.2 flutter下载flutter设置环境变量增加国内镜像 1.3 flutter doctorAndroid toolchain&#xff1a;cmdline-tools component is missingAndroid toolchain&#xff1a;Some Android licenses not acceptedChrom…...

Thread Servlet思考

在开发过程中我们经常会遇到两个对象分别是Thread和Servlet。但是很少会考虑到两者之前的关系。 Thread是线程&#xff0c;在tomcat服务器中请求被接收后&#xff0c;会启动线程对请求进行处理。线程会通过run方法执行实际执行的业务逻辑。在tomcat中当请求请求到线程池后&…...

电源滤波器怎么选用

电源滤波器怎么选用 滤波器应用场景及作用第一步&#xff1a;第二步&#xff1a;第三步&#xff1a;第四步&#xff1a; 滤波器应用场景及作用 可以有效解决EMC测试无法通过、端口防护、滤除干扰、设备保护等问题 主要功能有: 1、降低主电源谐波; 2、保护驱动装置电力电子元件…...

终于更新了!时隔一年niushop多商户b2b2c的新补丁v5.0.2终于发布了,一起看看有啥新变化

注意这是最新版的V5.02_多商户V5.0.2版本更新说明 瞧瞧更新了什么内容&#xff0c; 优化功能 优化手机号、身份证等常用验证规则&#xff0c;全局化处理优化商品列表接口查询速度 修复功能修复系统内部分图片上传功能调用接口跨端口问题修复总后台和商家后台订单管理搜索标签在…...

google的chromedriver最新版下载地址

Chrome for Testing availability (googlechromelabs.github.io) 复制对应的地址跳转进去即可下载&#xff0c;下载前先看下自己google浏览器版本&#xff0c;找到对应的版本号去下载&#xff0c;把解压缩的exe放到google浏览器目录下。...

Gitee的原理及应用详解(四)

本系列文章简介&#xff1a; Gitee是一款开源的代码托管平台&#xff0c;是国内最大的代码托管平台之一。它基于Git版本控制系统&#xff0c;提供了代码托管、项目管理、协作开发、代码审查等功能&#xff0c;方便团队协作和项目管理。Gitee的出现&#xff0c;在国内的开发者社…...

IP 协议的相关特性

目录 正文&#xff1a; 1.概述 2.协议头的格式 3.地址管理 3.1网段划分 3.2特殊的IP地址 3.3 IPv4的限制和解决办法 4.路由选择 总结&#xff1a; 正文&#xff1a; 1.概述 IP 协议是一个网络层协议&#xff0c;负责在不同网络之间传输数据包。它定义了数据包的格式…...

C++11 在 Windows 环境下的多线程编程指南

引言 随着多核处理器的普及&#xff0c;利用多线程编程来提升应用程序性能变得越来越重要。C11 标准库引入了一系列用于多线程编程的API&#xff0c;使得多线程编程变得更加简洁和高效。 一、基本概念 在开始编写多线程代码之前&#xff0c;了解一些基本概念是非常重要的&am…...

[数据集][目标检测]旋风检测数据集VOC+YOLO格式157张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;159 标注数量(xml文件个数)&#xff1a;159 标注数量(txt文件个数)&#xff1a;159 标注类别…...

智慧商砼搅拌车安监运营管理的创新实践

随着城市化进程的加速&#xff0c;商砼搅拌车作为城市建设的重要设备&#xff0c;其安全管理与运营效率直接关系到工程质量和施工进度。近年来&#xff0c;通过引入先进的4G无线视频智能车载终端套件&#xff0c;我们实现了对商砼搅拌车的高精度定位、实时音视频调度、实时油量…...

渗透测试框架提权

Metasploit自动提权 Meterpreter自动提权命令 getsystem&#xff1a; getsystem是由Metasploit-Framework提供的一个模块&#xff0c;它可以将一个管理帐户&#xff08;通常为本地Administrator账户&#xff09;提升为本地SYSTEM帐户 1)getsystem创建一个新的Windows服务&…...

tcp链接中的三次挥手是什么原因

一、tcp链接中的正常四次挥手过程&#xff1f; 刚开始双方都处于 ESTABLISHED 状态&#xff0c;假如是客户端先发起关闭请求。四次挥手的过程如下&#xff1a; 1、客户端打算关闭连接&#xff0c;此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文&#xff0c;也即 FIN 报文…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...