在 Java 集合框架中,ArrayList 很常用,但我发现很多初学者对 LinkedList 的理解总停留在“它是个列表”的层面。实际上,LinkedList 不仅仅是列表,它底层是 双向链表,还能轻松实现 (LIFO)和 队列(FIFO)操作

LinkedList 基础概念

LinkedList 是 Java 集合框架中的 链表实现类,实现了:

List 接口 → 可以像 ArrayList 一样存储对象,按顺序访问,Deque 接口 → 可以当 队列

底层结构

  • 双向链表:每个节点存储,数据,前驱节点引用,后继节点引用

特点总结

特性 ArrayList LinkedList
随机访问 快 O(1) 慢 O(n)
插入/删除 慢 O(n) 快 O(1)(首尾或迭代器定位)
内存占用 较大,每个节点存前驱/后继引用
适用场景 随机访问多 插入/删除多、队列/栈操作

LinkedList 基本操作

1. 创建 LinkedList
LinkedList<String> articles = new LinkedList<>();
  • 创建一个空链表,可以存任意对象类型,推荐使用泛型 <T> 保证类型安全

2. 添加元素
articles.add("Java入门");
articles.add("ArrayList实战");
articles.add("LinkedList解析");
  • add() → 默认在链表末尾添加,addFirst() → 在链表头添加,addLast() → 在链表尾添加(同 add())

3. 遍历元素
for(String a : articles){
    System.out.println(a);
}

效果:

Java入门
ArrayList实战
LinkedList解析

也可以用普通 for 循环或迭代器遍历

4. 删除元素
articles.removeFirst(); // 删除首元素
articles.removeLast();  // 删除尾元素
articles.remove("ArrayList实战"); // 删除指定元素

LinkedList 当栈使用(LIFO)

LinkedList<String> stack = new LinkedList<>();
stack.push("任务A");
stack.push("任务B");
stack.push("任务C");

System.out.println(stack.pop()); // 任务C
System.out.println(stack.pop()); // 任务B
  • push() → 压栈,pop() → 弹栈,栈是 后进先出(LIFO)

栈操作在链表头进行,效率高

LinkedList 当队列使用(FIFO)

LinkedList<String> queue = new LinkedList<>();
queue.addLast("任务1");
queue.addLast("任务2");
queue.addLast("任务3");

System.out.println(queue.removeFirst()); // 任务1
System.out.println(queue.removeFirst()); // 任务2
  • 队列是 先进先出(FIFO)addLast() → 入队,removeFirst() → 出队

适合消息队列、任务列表等场景


总结:

import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<String> articles = new LinkedList<>();

        // 添加元素
        articles.add("Java入门");
        articles.add("ArrayList实战");
        articles.add("LinkedList深入解析");

        // 遍历
        for(String a : articles){
            System.out.println(a);
        }

        // 在开头/结尾添加
        articles.addFirst("面向对象基础");
        articles.addLast("集合实战");
        System.out.println("添加首尾元素后:" + articles);

        // 删除首尾元素
        articles.removeFirst();
        articles.removeLast();
        System.out.println("删除首尾元素后:" + articles);

        // 访问元素
        System.out.println("第二篇文章:" + articles.get(1));
    }
}

效果:

Java入门
ArrayList实战
LinkedList深入解析
添加首尾元素后:[面向对象基础, Java入门, ArrayList实战, LinkedList深入解析, 集合实战]
删除首尾元素后:[Java入门, ArrayList实战, LinkedList深入解析]
第二篇文章:ArrayList实战

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐