【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.总结 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络I/O模型

网络I/O模型 同步I/O阻塞I/O非阻塞I/OI/O多路复用select函数接口示例 poll函数接口示例 poll 和 select 的区别epoll原理&#xff1a;示例 Reactor单 Reactor 单进程 / 线程&#xff1b;单 Reactor 多线程 / 进程&#xff1b;多 Reactor 多进程 / 线程&#xff1b; 异步I/O 同步…

歌声合成算法流程和基于lstm的算法实例

歌声合成(Singing Voice Synthesis, SVS)是一项复杂的任务,旨在生成具有自然音质和情感的歌声。实现这种效果的算法通常涉及多个步骤,包括音高预测、音素时长预测、声学特征生成和波形生成等。基于LSTM(Long Short-Term Memory)网络的歌声合成算法是其中一种常见的方法。…

【吊打面试官系列】Java高并发篇 - 什么是自旋 ?

大家好&#xff0c;我是锋哥。今天分享关于 【什么是自旋 &#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 什么是自旋 &#xff1f; 很多 synchronized 里面的代码只是一些很简单的代码&#xff0c;执行时间非常快&#xff0c;此时等待的线程都加锁可能是一种不…

CCIG学术论坛|文档解析技术加速大模型训练与应用

目录 前言一、大模型训练和应用过程的关键环节面临的问题1、数据2、算力3、语料4、训练时间5、模型规模与复杂度6、部署和推理效率7、安全和隐私 二、高精准、高效率的文档解析三、文档解析技术难点四、TextIn文档解析1、算法Pipeline2、文档图像预处理算法效果3、版面分析算法…

关于单链表——数组

1.单链表统计负数个数 要求实现一个函数&#xff0c;返回带头结点的单链表中负整数的个数。 函数接口定义&#xff1a; int NegativeInt(LinkList L); L是带头结点的单链表的头指针&#xff0c;函数NegativeInt返回L中负整数的个数。如果单链表为空&#xff0c;返回0。 其中Lin…

5岁幼儿编程:开启未来的神秘之门

5岁幼儿编程&#xff1a;开启未来的神秘之门 在数字化浪潮席卷全球的今天&#xff0c;编程教育已经逐渐渗透到各个年龄段&#xff0c;甚至包括5岁的幼儿。那么&#xff0c;5岁幼儿编程究竟是什么样的呢&#xff1f;它是否像成年人所理解的那样复杂和抽象&#xff1f;本文将从四…

小熊家务帮day5-day7 客户管理模块1 (小程序认证,手机验证码认证,账号密码认证,修改密码,找回密码等)

客户管理模块 1.认证模块1.1 认证方式介绍1.1.1 小程序认证1.1.2 手机验证码登录1.1.3 账号密码认证 1.2 小程序认证1.2.1 小程序申请1.2.2 创建客户后端工程jzo2o-customer1.2.3 开发部署前端1.2.4 小程序认证流程1.2.4.1 customer小程序认证接口设计Controller层Service层调用…

【人工智能】第一部分:ChatGPT的基本概念和技术背景

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

STM32作业实现(八)触摸按键TPAD

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

C语言编程训练图:解锁编程之路的迷宫与宝藏

C语言编程训练图&#xff1a;解锁编程之路的迷宫与宝藏 在编程的世界里&#xff0c;C语言如同一张错综复杂的训练图&#xff0c;它既是迷宫&#xff0c;也是宝藏图。只有那些勇敢而智慧的探险者&#xff0c;才能在其中找到通往编程大师的道路。本文将带领你一起探索这张神秘的…

Tika介绍

Apache Tika 是一个开源的Java库&#xff0c;用于检测和提取各种文件格式的内容。它能够识别超过1000种文件格式&#xff0c;并从中提取文本、元数据和结构化信息。Tika 是 Apache Software Foundation 的一个项目&#xff0c;它提供了一个简单的API&#xff0c;可以轻松地集成…

26 _ 虚拟DOM:虚拟DOM和实际的DOM有何不同?

虚拟DOM是最近非常火的技术&#xff0c;两大著名前端框架React和Vue都使用了虚拟DOM&#xff0c;所以我觉得非常有必要结合浏览器的工作机制对虚拟DOM进行一次分析。当然了&#xff0c;React和Vue框架本身所蕴含的知识点非常多&#xff0c;而且也不是我们专栏的重点&#xff0c…

VBA字典与数组第十五讲:多行多列数组与同列数单行数组间的运算规则

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

C语言编程代码软件:深入探索与实战应用

C语言编程代码软件&#xff1a;深入探索与实战应用 在编程的广袤领域中&#xff0c;C语言以其独特的魅力吸引着无数编程爱好者。作为一种基础且强大的编程语言&#xff0c;C语言在软件开发、系统编程、嵌入式系统等领域发挥着不可替代的作用。而要想熟练掌握C语言&#xff0c;…

LabVIEW齿轮调制故障检测系统

LabVIEW齿轮调制故障检测系统 概述 开发了一种基于LabVIEW平台的齿轮调制故障检测系统&#xff0c;实现齿轮在恶劣工作条件下的故障振动信号的实时在线检测。系统利用LabVIEW的强大图形编程能力&#xff0c;结合Hilbert包络解调技术&#xff0c;对齿轮的振动信号进行精确分析…

Stream API实践,string转 List<Long>

需求背景: 有个工具接口要求入参是List&#xff0c;但我的数据是string (string ruleId"1234)。 可以通过创建一个List容器&#xff0c;再把元素转成Long添进去&#xff0c;但太繁琐了。而且后面如果要改成多个元素&#xff0c;还要加个遍历。 但用 stream API一行解决。具…

【手撕面试题】Vue(高频知识点三)

每天10道题&#xff0c;100天后&#xff0c;搞定所有前端面试的高频知识点&#xff0c;加油&#xff01;&#xff01;&#xff01;在看文章的同时&#xff0c;希望不要直接看答案&#xff0c;先思考一下自己会不会&#xff0c;如果会&#xff0c;自己的答案是什么&#xff1f;想…

55、试除法判定质数

试除法判定质数 题目描述 给定n个正整数ai&#xff0c;判定每个数是否是质数。 输入格式 第一行包含整数n。 接下来n行&#xff0c;每行包含一个正整数ai。 输出格式 共n行&#xff0c;其中第 i 行输出第 i 个正整数ai 是否为质数&#xff0c;是则输出“Yes”&#xff…

高考后的赚钱新路径:千行赏金助你开启财富之旅

一、兼职背景与需求 随着高考的落幕&#xff0c;众多学子迎来了人生中的一大转折点。在迈向大学校园的门槛之前&#xff0c;许多学生希望利用这段空闲时间做些兼职&#xff0c;既能够充实自己的暑假生活&#xff0c;又能为家庭减轻经济负担&#xff0c;甚至为自己积累一些宝贵…

基于django | 创建app,并启动django

1、删除系统默认的目录路径&#xff1a;BASE_DIR / templetes 2、在终端输入命令&#xff1a; python manage.py startapp app01 # 这里的app01是我创建app的名称 3、如果没有创建成功&#xff0c;手动点击 Creat App , 4、在 setting.py 中找到 INSTALLED_APPS ,添加 ap…