亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java LinkedList 全面指南:原理、方法与实战示例

Java LinkedList

通过实战代码示例与最佳实践,掌握 Java LinkedList 的高效数据操作技巧。

Java 集合框架中的 LinkedList 类实现了双向链表。每个元素(称为 节点)包含三个字段:


创建 Java LinkedList

用指定元素类型实例化:

LinkedList<Type> list = new LinkedList<>();

示例:

// Integer 列表
LinkedList<Integer> numbers = new LinkedList<>();
// String 列表
LinkedList<String> words = new LinkedList<>();

示例:创建 LinkedList

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> animals = new LinkedList<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Cow");
        System.out.println("LinkedList: " + animals);
    }
}

输出

LinkedList: [Dog, Cat, Cow]

该代码演示了通过 add() 向名为 animals 的 LinkedList 添加三个元素。


LinkedList 的工作原理

与数组不同,节点分散在内存中并通过链接连接。下图展示三个节点及其连接关系。

Java LinkedList 全面指南:原理、方法与实战示例

深入了解请参阅 链表 条目。


LinkedList 的核心方法

以下为最常用操作:


1. 添加元素

用 add() 追加节点,可选指定索引:

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> animals = new LinkedList<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Cow");
        System.out.println("LinkedList: " + animals);
        animals.add(1, "Horse");
        System.out.println("更新后的 LinkedList: " + animals);
    }
}

输出

LinkedList: [Dog, Cat, Cow]
更新后的 LinkedList: [Dog, Horse, Cat, Cow]

第二个 add() 在索引 1 处插入 "Horse",后续元素后移。


2. 访问元素

用 get() 按索引获取:

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> languages = new LinkedList<>();
        languages.add("Python");
        languages.add("Java");
        languages.add("JavaScript");
        System.out.println("LinkedList: " + languages);
        String str = languages.get(1);
        System.out.print("索引 1 处的元素: " + str);
    }
}

输出

LinkedList: [Python, Java, JavaScript]
索引 1 处的元素: Java

也可通过 iterator() 或 listIterator() 进行高级遍历。


3. 更新元素

用 set() 替换指定索引处的元素:

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> languages = new LinkedList<>();
        languages.add("Java");
        languages.add("Python");
        languages.add("JavaScript");
        languages.add("Java");
        System.out.println("LinkedList: " + languages);
        languages.set(3, "Kotlin");
        System.out.println("更新后的 LinkedList: " + languages);
    }
}

输出

LinkedList: [Java, Python, JavaScript, Java]
更新后的 LinkedList: [Java, Python, JavaScript, Kotlin]

4. 移除元素

用 remove() 按索引删除:

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> languages = new LinkedList<>();
        languages.add("Java");
        languages.add("Python");
        languages.add("JavaScript");
        languages.add("Kotlin");
        System.out.println("LinkedList: " + languages);
        String removed = languages.remove(1);
        System.out.println("被移除的元素: " + removed);
        System.out.println("更新后的 LinkedList: " + languages);
    }
}

输出

LinkedList: [Java, Python, JavaScript, Kotlin]
被移除的元素: Python
新 LinkedList: [Java, JavaScript, Kotlin]

其他实用方法

方法说明
contains()判断值是否存在
indexOf()首次出现的索引
lastIndexOf()最后一次出现的索引
clear()清空所有元素
iterator()提供迭代器

LinkedList 作为 Queue 与 Deque

因 LinkedList 实现 Queue 和 Deque,支持 FIFO 与 LIFO 操作。常用方法:

方法说明
addFirst()头部添加
addLast()尾部添加
getFirst()查看头部
getLast()查看尾部
removeFirst()弹出头部
removeLast()弹出尾部
peek()查看头部不移除
poll()获取并移除头部
offer()尾部入队

示例:LinkedList 作为 Queue

import java.util.LinkedList;
import java.util.Queue;
class Main {
    public static void main(String[] args){
        Queue<String> languages = new LinkedList<>();
        languages.add("Python");
        languages.add("Java");
        languages.add("C");
        System.out.println("LinkedList: " + languages);
        String first = languages.peek();
        System.out.println("访问的元素: " + first);
        String removed = languages.poll();
        System.out.println("移除的元素: " + removed);
        System.out.println("poll() 后的 LinkedList: " + languages);
        languages.offer("Swift");
        System.out.println("offer() 后的 LinkedList: " + languages);
    }
}

输出

LinkedList: [Python, Java, C]
访问的元素: Python
移除的元素: Python
poll() 后的 LinkedList: [Java, C]
offer() 后的 LinkedList: [Java, C, Swift]

示例:LinkedList 作为 Deque

import java.util.LinkedList;
import java.util.Deque;
class Main {
    public static void main(String[] args){
        Deque<String> animals = new LinkedList<>();
        animals.add("Cow");
        System.out.println("LinkedList: " + animals);
        animals.addFirst("Dog");
        System.out.println("addFirst() 后: " + animals);
        animals.addLast("Zebra");
        System.out.println("addLast() 后: " + animals);
        animals.removeFirst();
        System.out.println("removeFirst() 后: " + animals);
        animals.removeLast();
        System.out.println("removeLast() 后: " + animals);
    }
}

输出

LinkedList: [Cow]
addFirst() 后: [Dog, Cow]
addLast() 后: [Dog, Cow, Zebra]
removeFirst() 后: [Cow, Zebra]
removeLast() 后: [Cow]

遍历 LinkedList

增强 for 循环提供简洁遍历方式:

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> animals = new LinkedList<>();
        animals.add("Cow");
        animals.add("Cat");
        animals.add("Dog");
        System.out.println("LinkedList: " + animals);
        System.out.println("遍历链表元素:");
        for(String animal: animals){
            System.out.print(animal + ", ");
        }
    }
}

输出

LinkedList: [Cow, Cat, Dog]
遍历链表元素: Cow, Cat, Dog,

LinkedList 与 ArrayList 对比

两者均实现 List,但性能特征不同:

LinkedListArrayList
实现 List、Queue、Deque仅实现 List
节点存储 prev、data、next单个元素占数组槽位
双向链表结构可调整大小的数组
已知位置时插入/删除 O(1)指定索引后插入需移动 O(n)
随机访问需遍历 O(n)直接索引访问 O(1)

注意:可通过任一接口实例化 LinkedList:

// 通过 List
List<String> animals1 = new LinkedList<>();
// 通过 Queue
Queue<String> animals2 = new LinkedList<>();
// 通过 Deque
Deque<String> animals3 = new LinkedList<>();

使用接口引用时,仅能访问该接口定义的方法。


java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java if…else:控制流全解析
  4. 精通 Java 增强 for 循环:语法、示例与最佳实践
  5. 精通 Java 字符串:创建、方法与最佳实践
  6. 精通 Java 接口:概念、实现与最佳实践
  7. 精通 Java 匿名内部类:定义、语法与实战示例
  8. 精通 Java Try-With-Resources:自动资源管理详解
  9. Java 注解详解:类型、放置位置与实战示例
  10. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  11. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
  12. Java 8 速查手册:核心新特性、语法、API 与最佳实践一站式参考