LinkedList

一.IDEA的链表库

IDEA上实现链表的包,实现的是无头双向不循环链表:(并且这个链表有头尾节点)

二.自己实现一个无头双向不循环链表

1.创建链表的类,在链表内中定义一个节点的内部类,并且在链表的类中定义头节点和尾节点:

2.之后和的单链表是一样的结构,头插尾插指定位置插入删除第一个为val值的节点,删除所有为val值的节点,清空链表,链表的长度,链表的查找,链表的打印:

这里需要重点说的就是删除节点的数据,因为双向链表存在头尾节点,然后如果只有一个节点的话,要删除这个节点就要直接将这个头尾节点设置为null就行了, 如果删除头节点,那么就要考虑头节点是没有前驱节点的,是不能把前驱节点的next指向头节点的next的节点。尾节点也是这个道理。

删除所有val值的节点就把return删去即可。

三.IDEA上的LinkedList

1.LinkedList实现了List的接口。

2.LinkedList底层使用的是双向链表。

3.LinkedList可以随机访问。(这里说的随机访问还是通过循环链表来实现的)

4.LinkedList没有实现RandomAccess接口。

5.LinkedList的任意位置插入和删除元素时效率比较高,时间复杂度为O(1) 。(这里的时间复杂度指的是删除的数据的时候才是O(1)因为删除元素的时候不需要移动元素,但是整个过程的话要加上找到index下标的元素,时间复杂度就成为O(N)了)

6.LinkedList比较适合任意位置插入的场景。

7.LinkedList的两种构造方法:

第二种构造方法,其中就类似于泛型的上界,这里的colletion被ArrayList和LinkedList所实现的:

这里的add默认方法是尾插法:其他的方法都和我们实现的是一样的。

Linked List的其他方法:

LinkedList的遍历

1.for-each循环:

2.for循环(需要注意的是,不能在循环里面边打印边删除,因为当你在打印第一个数据的时候,第二个数据就变成第一个数据了,但是此时你的i的数据是2而不是1,就会导致空指针异常):

3.迭代器遍历:

四.ArrayList和LinkedList区别:

相关推荐
彧azz5 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
IT_Octopus5 小时前
IntelliJ 本地日志路径自定义:`-DLOG_PATH=./logs` 为什么总“不听话“
java·log4j·intellij-idea
嵌入式学习菌6 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
长征coder6 小时前
【无标题】
java·性能优化
matlab代码6 小时前
基于matlab数字图像处理的指纹识别系统【源码68期】
开发语言·matlab
新时代牛马6 小时前
PCI与PCIe 硬件原理、配置空间/BAR 与 Linux 驱动完整篇:从 LTSSM、TLP 到 ECAM 与probe
java·linux·服务器
Bs_MoneyMagnet7 小时前
基于springboot+vue的医疗健康便民服务平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
matlab代码7 小时前
基于matlab的水果识别系统(苹果香蕉菠萝梨桃子)【源码65期】
开发语言·matlab
wuyk5557 小时前
从零吃透 MQTT 通信|第 8 章 FreeRTOS 多任务架构下 MQTT 工程架构,任务拆分、队列解耦、临界区保护
c语言·开发语言·stm32·学习·架构
weixin199701080167 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas