文章目录
-
- 一、什么是链表?
- [二、LinkedList 是什么?](#二、LinkedList 是什么?)
- [三、LinkedList 的基本使用](#三、LinkedList 的基本使用)
-
- [1. 添加元素](#1. 添加元素)
- [2. 添加到开头](#2. 添加到开头)
- [3. 添加到末尾](#3. 添加到末尾)
- [4. 获取第一个元素](#4. 获取第一个元素)
- [5. 获取最后一个元素](#5. 获取最后一个元素)
- [6. 删除第一个元素](#6. 删除第一个元素)
- [7. 删除最后一个元素](#7. 删除最后一个元素)
- [四、LinkedList 也可以当队列使用](#四、LinkedList 也可以当队列使用)
- 五、队列常用方法
- [六、LinkedList 常见使用场景](#六、LinkedList 常见使用场景)
- [七、LinkedList 和 ArrayList 简单区别](#七、LinkedList 和 ArrayList 简单区别)
- 八、总结
在 Java 中, LinkedList 是一个常见的集合类,中文一般叫 链表 。
它可以像普通列表一样存放数据,也可以当作队列使用。比如我们经常会看到这样的代码:
java
Queue<int[]> queue = new LinkedList<>();
这行代码的意思是:
用
LinkedList创建了一个队列对象。
一、什么是链表?
链表是一种用来存储数据的数据结构。
通俗理解:
链表不是把数据连续放在一起,而是一个节点连着一个节点。
每个节点里面通常包含两部分:
数据 + 下一个节点的位置
可以想象成一串火车:
[数据1] -> [数据2] -> [数据3] -> [数据4]
每一节车厢里都有数据,并且知道下一节车厢在哪里。
所以,链表的核心特点就是:
一个节点连接一个节点
二、LinkedList 是什么?
LinkedList 是 Java 提供的链表集合类,使用前需要导包:
java
import java.util.LinkedList;
创建一个 LinkedList:
java
LinkedList<String> list = new LinkedList<>();
这表示创建了一个链表,里面存放的是字符串类型的数据。
三、LinkedList 的基本使用
1. 添加元素
java
LinkedList<String> list = new LinkedList<>();
list.add("Java");
list.add("MySQL");
list.add("Redis");
System.out.println(list);
输出结果:
[Java, MySQL, Redis]
可以理解为:
Java -> MySQL -> Redis
2. 添加到开头
java
list.addFirst("Spring Boot");
示例:
java
LinkedList<String> list = new LinkedList<>();
list.add("MySQL");
list.add("Redis");
list.addFirst("Spring Boot");
System.out.println(list);
输出:
[Spring Boot, MySQL, Redis]
3. 添加到末尾
java
list.addLast("Docker");
示例:
java
LinkedList<String> list = new LinkedList<>();
list.add("Java");
list.add("MySQL");
list.addLast("Docker");
System.out.println(list);
输出:
[Java, MySQL, Docker]
其实 add() 默认也是添加到末尾。
4. 获取第一个元素
java
System.out.println(list.getFirst());
示例:
java
LinkedList<String> list = new LinkedList<>();
list.add("Java");
list.add("MySQL");
list.add("Redis");
System.out.println(list.getFirst());
输出:
Java
5. 获取最后一个元素
java
System.out.println(list.getLast());
输出:
Redis
6. 删除第一个元素
java
list.removeFirst();
示例:
java
LinkedList<String> list = new LinkedList<>();
list.add("Java");
list.add("MySQL");
list.add("Redis");
list.removeFirst();
System.out.println(list);
输出:
[MySQL, Redis]
7. 删除最后一个元素
java
list.removeLast();
示例:
java
LinkedList<String> list = new LinkedList<>();
list.add("Java");
list.add("MySQL");
list.add("Redis");
list.removeLast();
System.out.println(list);
输出:
[Java, MySQL]
四、LinkedList 也可以当队列使用
LinkedList 不仅可以当普通列表用,也可以当队列用。
队列的特点是:
先进先出
也就是:
先放进去的数据,先被取出来。
示例:
java
import java.util.LinkedList;
import java.util.Queue;
public class QueueDemo {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.offer("张三");
queue.offer("李四");
queue.offer("王五");
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
}
}
输出:
张三
李四
王五
执行过程可以理解为:
入队:张三 -> 李四 -> 王五
第一次 poll:取出张三
第二次 poll:取出李四
第三次 poll:取出王五
五、队列常用方法
当 LinkedList 当作队列使用时,常用方法有这几个:
java
offer() // 入队
poll() // 出队,并删除元素
peek() // 查看队头元素,但不删除
isEmpty() // 判断队列是否为空
示例:
java
Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
queue.offer("C");
System.out.println(queue.peek()); // A,只查看,不删除
System.out.println(queue.poll()); // A,取出并删除
System.out.println(queue); // [B, C]
六、LinkedList 常见使用场景
LinkedList 常见使用场景主要有两个。
第一个是当普通链表使用:
java
LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("C");
第二个是当队列使用:
java
Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
String value = queue.poll();
在算法题中,LinkedList 经常用于 BFS 广度优先搜索:
java
Queue<int[]> queue = new LinkedList<>();
queue.offer(new int[]{0, 0});
while (!queue.isEmpty()) {
int[] cur = queue.poll();
int x = cur[0];
int y = cur[1];
System.out.println(x + "," + y);
}
这里的 int[] 可以理解为一个坐标,比如:
java
new int[]{0, 0}
表示坐标 (0, 0)。
七、LinkedList 和 ArrayList 简单区别
ArrayList 底层更像数组,适合按照下标查询。
java
list.get(0);
list.get(1);
list.get(2);
LinkedList 底层是链表,适合在头部、尾部进行添加和删除。
java
list.addFirst("A");
list.removeFirst();
list.addLast("B");
list.removeLast();
简单记忆:
经常查询:优先考虑 ArrayList
经常头尾添加删除:可以考虑 LinkedList
需要队列:可以使用 Queue + LinkedList
八、总结
LinkedList 是 Java 中的链表集合类。
它的核心特点是:
一个节点连接一个节点
可以理解为:
数据1 -> 数据2 -> 数据3 -> 数据4
常见用法有两个:
1. 当普通链表使用
2. 当队列 Queue 使用
普通链表写法:
java
LinkedList<String> list = new LinkedList<>();
队列写法:
java
Queue<String> queue = new LinkedList<>();
队列常用方法:
java
queue.offer(); // 入队
queue.poll(); // 出队并删除
queue.peek(); // 查看队头
queue.isEmpty(); // 判断是否为空
一句话记住:
LinkedList是链表,适合头尾添加删除,也经常用来实现队列。