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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[激光原理与应用-94]:电控 - 低噪声运放的原理

目录 一、什么是低噪声运放 1.1 什么是低噪声水平 1.2 什么是高增益 在电子工程中的应用 在通信领域的应用 在音频和视频处理中的应用 注意事项 1.3 什么是宽带宽 1.4 什么是低偏置电流 重要性 特点 解决方法 应用 二、低噪声运放的原理图 1. 基本构成 2. 设计…

Qml开发的两种方法

一.Qml开发的两种方法 1.Qt Creator 开发,手动编写qml代码 这种方法开发很方便&#xff0c;适合对qml语言非常熟悉的开发人员。 2.用Qt Design Studio 设计qml界面 这种方法更适合对qml不太熟悉的人&#xff0c;可以实现qml控件的拖拉拽&#xff0c;类似与widget界面开发&…

【面试经典150题】删除有序数组中的重复项

目录 一.删除有序数组中的重复项 一.删除有序数组中的重复项 题目如上图所示&#xff0c;这里非严格递增排序的定义是数字序列&#xff0c;其中相邻的数字可以相等&#xff0c;并且数字之间的差值为1。 这题我们依旧使用迭代器进行遍历&#xff0c;比较当前的数据是否与下一个数…

梯度下降: 01.原理与代码实操

1. 简介 梯度下降法(GradientDescent) 算法,不像多元线性回归那样是一个具体做回归任务的算法,而是一个非常通用的优化算法来帮助一些机器学习算法(都是无约束最优化问题)求解出最优解,所谓的通用就是很多机器学习算法都是用梯度下降,甚至深度学习也是用它来求解最优解。…

Android 控件保持宽高比得几种方式

文章目录 Android 控件保持宽高比得几种方式adjustViewBounds百分比布局ConstraintLayout自定义View Android 控件保持宽高比得几种方式 adjustViewBounds 仅适用于 ImageView&#xff0c;保持横竖比。 <ImageViewandroid:layout_width"match_parent"android:l…

0基础学习Elasticsearch-使用Java操作ES

文章目录 1 背景2 前言3 Java如何操作ES3.1 引入依赖3.2 依赖介绍3.3 隐藏依赖3.4 初始化客户端&#xff08;获取ES连接&#xff09;3.5 发送请求给ES 1 背景 上篇学习了0基础学习Elasticsearch-Quick start&#xff0c;随后本篇研究如何使用Java操作ES 2 前言 建议通篇阅读再回…

20240601在飞凌的OK3588-C开发板上跑IPC的SDK确认eth0

20240601在飞凌的OK3588-C开发板上跑IPC的SDK确认eth0 2024/6/1 14:04 结论&#xff1a;IPC因为需要推流&#xff0c;默认配置了DHCP&#xff0c;插网线可以自动获取IP地址&#xff1a;192.168.3.142 可以PING通局域网服务器&#xff1a;192.168.3.85和百度。 Buildroot默认只能…

Stable Diffusion安装记录II

文章目录 前言0 更改python路径&#xff08;跳过&#xff09;1 Torch is not able to use GPU1.1 确认显卡1.2 安装nvdia驱动 1.3 检查CUDA1.4更改启动脚本 2 依赖安装2.1 pip install报错2.2 git报错2.3 卡在installing requirements 3 启动咯~3.1 clip报错 4 成功运行4.1 遗留…

Asp.Net Core 实现分片下载的最简单方式

技术群里的朋友遇到了这个问题&#xff0c;起初的原因是他对文件增加了一个属性配置 fileResult.EnableRangeProcessing true;这个属性我从未遇到过&#xff0c;然后&#xff0c;去F1查看这个属性的描述信息也依然少的可怜&#xff0c;只有简单的描述为(获取或设置为 启用范围…

CTF本地靶场搭建——GZ:CTF基础使用

GZ::CTF 是一个基于 ASP.NET Core 的开源 CTF 平台。 简介 GZ::CTF 是一个基于 ASP.NET Core 的开源 CTF 平台&#xff0c;采用 Docker 或 K8s 作为容器部署后端&#xff0c;提供了可自定义的题目类型、动态容器和动态分值功能。 本项目缘起于作者认为 CTFd 的实现不优雅&a…

深度学习-03-函数的连续调用

深度学习-03-函数的连续调用 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xff0…

v-for中key的作用

v-for中key的作用 例如我们用v-for渲染一个列表[1, 2, 4 ,5]&#xff0c;然后在中间插入一个3变成[1,2,3,4,5]。v-for写了key和没有写key&#xff0c;Vue是怎么处理的呢&#xff1f; Vue对有key的会调用patchKeyedChildren方法&#xff1b;没有key的调用patchUnkeyedChildren方…

领导力中的说服艺术

本文主要介绍了亚里士多德修辞三角理论&#xff0c;即演讲者在说服听众时如何运用品格&#xff08;Ethos&#xff09;、情感&#xff08;Pathos&#xff09;和逻辑&#xff08;Logos&#xff09;三种基本的修辞手法。原文: The Art of Persuasion in Leadership 亚里士多德的说…

autodl服务器中YOLOx训练自己数据集

目录 本篇文章主要讲解使用YOLOx训练自己数据集&#xff0c;其中包括数据集格式转换~ 目录 一、数据集处理二、环境配置三、配置文件修改四、开始训练五、开始验证 一、数据集处理 第一步&#xff1a;将yolo格式的数据集转换成VOC格式 转换脚本&#xff1a;txt_to_xml.py f…

备战十一届大唐杯国赛预选赛

这次省赛带了太多个省一了&#xff0c;具体可看下面的图片&#xff0c;只放了一部分。目前根据可靠消息&#xff0c;应该还有个预选赛和去年一样&#xff0c;就是还会考一次仿真。如果说通过了就是国二起步然后去北方工业争夺国一国二&#xff0c;没过的话就是国三。 每…

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

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

海南省三支一扶报名照上传失败?别忘了这

一、海南三支一扶报名照上传失败的2个原因 1.未按要求使用浏览器&#xff1a;请使用IE浏览器&#xff08;IE8以上版本&#xff09;、Chrome(谷歌浏览器&#xff09;或 Firefox&#xff08;火狐&#xff09;浏览器 来使用本系统&#xff0c;360浏览器等其他浏览器请使用极速模式…

python-最接近target的值

【问题描述】&#xff1a;给定一个数组&#xff0c;在数组中找到两个数&#xff0c;使它们的和最接近目标值的值但不超过目标值&#xff0c;然后返回它们的和。 【问题示例】&#xff1a;输入target15,array[1,3,5,11,7],输出14&#xff0c;31114。 完整代码如下&#xff1a; …

使用 Navicat 工具查看 SQLite 数据库中的 PNG 图片

Navicat 是一款功能强大的数据库管理工具&#xff0c;支持多种数据库类型&#xff0c;包括 SQLite。它提供了一个直观的用户界面&#xff0c;可以轻松查看、编辑和管理数据库数据。 SQLite 是一种轻量级的嵌入式数据库&#xff0c;常用于移动应用程序和小型项目。它支持存储各…

Pytest框架中的Setup和Teardown功能

在 pytest 测试框架中&#xff0c;setup 和 teardown是用于在每个测试函数之前和之后执行设置和清理的动作&#xff0c;而pytest 实际上并没有内置的 setup 和 teardown 函数&#xff0c;而是使用了一些装饰器或钩子函数来实现类似的功能。 学习目录 钩子函数&#xff08;Hook…