LinkedList的简单介绍
- java.util.LinkedList 集合数据存储的结构是链表结构。LinkedList是一个双向链表
- 在实际开发中,对一个集合元素的添加和删除,经常涉及到首尾操作,而LinkedList就提供了大量的首尾操作的方法
LinkedList集合的特点
- 方便元素的添加、删除
- 元素的查询慢
- 里面包括了大量首尾首尾操作的方法
注意:LinkedList集合的方法不能使用多态
为什么说LinkedList集合添加、删除元素方便,查询元素慢
- 首先,LinkedList集合数据存储的结构是链表结构
- 而链表是添加、删除元素方便,查询元素慢的:
- 查询慢:链表中地址不是连续的每次查询元素都必须从头开始查询
- 增删快:链表结构增加/删除一个元素对链表的整体结构没有影响,所以增删快
操作集合首尾的方法、是否为空判断方法
复制 | public void addFirst(E e):将指定元素插入此列表的开头。 |
| public void addLast(E e):将指定元素添加到此列表的结尾。 |
| |
| public E getFirst():返回此列表的第一个元素。 |
| public E getLast():返回此列表的最后一个元素。 |
| |
| public E removeFirst():移除并返回此列表的第一个元素。 |
| public E removeLast():移除并返回此列表的最后一个元素。 |
| |
| public void push(E e):将元素推入此列表所表示的堆栈。 |
| public E pop():从此列表所表示的堆处弹出一个元素。 |
| |
| public boolean isEmpty():如果列表不包含元素,则返回true |
addFirst()和addLast()方法
复制 | public class DemoLinkedListAddFirstLast { |
| public static void main(String[] args) { |
| |
| LinkedList<String> linkedList = new LinkedList<>(); |
| |
| |
| linkedList.add(0, "链表元素0"); |
| linkedList.add(1, "链表元素1"); |
| linkedList.add(2, "链表元素2"); |
| linkedList.add(3, "链表元素3"); |
| linkedList.add(4, "链表元素4"); |
| linkedList.add(5, "链表元素5"); |
| System.out.println(linkedList); |
| |
| |
| linkedList.addFirst("开头"); |
| |
| linkedList.addLast("结尾"); |
| System.out.println(linkedList); |
| } |
| } |
复制 | 输出结果: |
| [链表元素0, 链表元素1, 链表元素2, 链表元素3, 链表元素4, 链表元素5] |
| [开头, 链表元素0, 链表元素1, 链表元素2, 链表元素3, 链表元素4, 链表元素5, 结尾] |
getFirst()和getLact()方法
复制 | import java.util.LinkedList; |
| |
| public class DemoLinkedListGetFirstLast { |
| public static void main(String[] args) { |
| |
| LinkedList<String> linkedList = new LinkedList<>(); |
| |
| |
| linkedList.add(0, "链表元素0"); |
| linkedList.add(1, "链表元素1"); |
| linkedList.add(2, "链表元素2"); |
| linkedList.add(3, "链表元素3"); |
| linkedList.add(4, "链表元素4"); |
| linkedList.add(5, "链表元素5"); |
| System.out.println(linkedList); |
| |
| |
| String first = linkedList.getFirst(); |
| |
| String last = linkedList.getLast(); |
| System.out.println("第一个元素:" + first); |
| System.out.println("最后一个元素:" + last); |
| } |
| } |
复制 | 输出结果: |
| [链表元素0, 链表元素1, 链表元素2, 链表元素3, 链表元素4, 链表元素5] |
| 第一个元素:链表元素0 |
| 最后一个元素:链表元素5 |
removeFirst()和removeLast()方法
复制 | import java.util.LinkedList; |
| |
| public class DemoLinkedListRemoveFirstLast { |
| public static void main(String[] args) { |
| |
| LinkedList<String> linkedList = new LinkedList<>(); |
| |
| |
| linkedList.add(0, "链表元素0"); |
| linkedList.add(1, "链表元素1"); |
| linkedList.add(2, "链表元素2"); |
| linkedList.add(3, "链表元素3"); |
| linkedList.add(4, "链表元素4"); |
| linkedList.add(5, "链表元素5"); |
| System.out.println(linkedList); |
| |
| |
| String first = linkedList.removeFirst(); |
| |
| String last = linkedList.removeLast(); |
| System.out.println("移除的第一个元素:" + first); |
| System.out.println("移除的最后一个元素:" + last); |
| System.out.println("此时的集合:" + linkedList); |
| } |
| } |
复制 | 输出结果: |
| [链表元素0, 链表元素1, 链表元素2, 链表元素3, 链表元素4, 链表元素5] |
| 移除的第一个元素:链表元素0 |
| 移除的最后一个元素:链表元素5 |
| 此时的集合:[链表元素1, 链表元素2, 链表元素3, 链表元素4] |
push()和pop()方法
说明:
- push()方法和addFirst()方法功能一样
- pop()方法和removeFirst()方法功能一样
复制 | import java.util.LinkedList; |
| |
| public class DemoLinkedListPushPop { |
| public static void main(String[] args) { |
| |
| LinkedList<String> linkedList = new LinkedList<>(); |
| |
| |
| linkedList.add(0, "链表元素0"); |
| linkedList.add(1, "链表元素1"); |
| linkedList.add(2, "链表元素2"); |
| System.out.println("原集合:" + linkedList); |
| |
| |
| linkedList.push("push元素"); |
| System.out.println("push()操作后的集合:" + linkedList); |
| |
| |
| linkedList.pop(); |
| System.out.println("push()操作后的集合:" + linkedList); |
| } |
| } |
复制 | 输出结果: |
| 原集合:[链表元素0, 链表元素1, 链表元素2] |
| push()操作后的集合:[push元素, 链表元素0, 链表元素1, 链表元素2] |
| push()操作后的集合:[链表元素0, 链表元素1, 链表元素2] |
isEmpty()方法
复制 | import java.util.LinkedList; |
| |
| public class DemoLinkedListIsEmpty { |
| public static void main(String[] args) { |
| |
| LinkedList<String> linkedList = new LinkedList<>(); |
| |
| boolean b1 = linkedList.isEmpty(); |
| System.out.println("集合是否为空:" + b1); |
| |
| |
| linkedList.add(0, "链表元素0"); |
| linkedList.add(1, "链表元素1"); |
| linkedList.add(2, "链表元素2"); |
| |
| boolean b2 = linkedList.isEmpty(); |
| System.out.println("集合是否为空:" + b2); |
| } |
| } |
复制 | 输出结果: |
| 集合是否为空:true |
| 集合是否为空:false |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)