Java集合 LinkedList

LinkedList

LinkedList是Java中的一个重要的数据结构,它实现了List接口,提供了链表数据结构的实现。LinkedList类中包含了各种常用的链表操作,如添加、删除、查找等。

LinkedList的特点是元素可以动态地添加到链表的任意位置,并且链表中的元素可以按照它们被添加的顺序来遍历。由于LinkedList是基于链表实现的,因此它具有以下特点:

  1. 插入和删除操作可以在任何位置进行,时间复杂度为O(1)。
  2. 访问元素的操作可以在任何位置进行,时间复杂度为O(n)。
  3. 链表中的元素在内存中不是连续存储的,因此无法通过下标直接访问元素。

下面是一个简单的示例,演示如何使用LinkedList类:

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        // 创建一个新的LinkedList对象
        LinkedList<String> linkedList = new LinkedList<>();

        // 添加元素到链表末尾
        linkedList.add("Element 1");
        linkedList.add("Element 2");
        linkedList.add("Element 3");

        // 在指定位置插入元素
        linkedList.add(1, "Element 4");

        // 遍历链表并打印元素
        for (String element : linkedList) {
            System.out.println(element);
        }

        // 删除指定位置的元素
        linkedList.remove(1);

        // 遍历链表并打印元素
        for (String element : linkedList) {
            System.out.println(element);
        }
    }
}

输出:

Element 1
Element 4
Element 2
Element 3

实例

假设我们有一个学生名单,每个学生有一个名字和学号。我们想要创建一个可以添加、删除和查找学生的链表。

  1. 首先,我们需要创建一个Student类,表示每个学生:
public class Student {  
    private String name;  
    private int studentId;  
  
    public Student(String name, int studentId) {  
        this.name = name;  
        this.studentId = studentId;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public int getStudentId() {  
        return studentId;  
    }  
}
  1. 接下来,我们可以创建一个LinkedList的实例,并添加一些学生:
import java.util.LinkedList;  
  
public class Main {  
    public static void main(String[] args) {  
        // 创建一个新的LinkedList对象  
        LinkedList<Student> studentList = new LinkedList<>();  
  
        // 添加学生到链表末尾  
        studentList.add(new Student("Alice", 1));  
        studentList.add(new Student("Bob", 2));  
        studentList.add(new Student("Charlie", 3));  
        studentList.add(new Student("David", 4));  
  
        // 遍历链表并打印学生信息  
        for (Student student : studentList) {  
            System.out.println("Name: " + student.getName() + ", Student ID: " + student.getStudentId());  
        }  
    }  
}
  • 输出:
    在这里插入图片描述
  1. 现在,如果我们想在链表的特定位置插入一个新学生,我们可以使用add方法:
// 在指定位置插入新学生(位置为2)  
studentList.add(2, new Student("Eve", 5));

在这里插入图片描述

  1. 在Java的LinkedList类中,没有直接提供删除指定索引的学生的方法。但是,您可以通过以下步骤实现该功能:

    使用indexOf方法找到要删除学生的索引。
    使用remove方法删除该索引处的元素。

        // 要删除的学号  

        int studentIdToRemove = 3;  

        // 查找要删除学生的索引  

        int index = -1;  

        for (int i = 0; i < studentList.size(); i++) {  

            Student student = studentList.get(i);  

            if (student.getStudentId() == studentIdToRemove) {  

                index = i;  

                break;  

            }  

        }  
        // 检查是否找到了要删除的学生  

        if (index != -1) {  

            // 删除该索引处的元素(学生)  

            studentList.remove(index);  

            System.out.println("学生 " + studentIdToRemove + " 已被删除。");  

        } else {  

            System.out.println("未找到学生 " + studentIdToRemove + "。");  

        } 

在这里插入图片描述

  1. 根据学号查找学生,你可以使用Java中的 LinkedList 类的 indexOf 方法来找到具有特定学号的学生。
// 要查询的学号  
        int studentIdToFind = 5;  
  
        // 查找具有指定学号的学生并输出其名字  
        Student foundStudent = null;  
        for (Student student : studentList) {  
            if (student.getStudentId() == studentIdToFind) {  
                foundStudent = student;  
                break;  
            }  
        }  
        if (foundStudent != null) {  
            System.out.println("找到了学生: " + foundStudent.getName() + ", 学号: " + foundStudent.getStudentId());  
        } else {  
            System.out.println("未找到学生 " + studentIdToFind + "。");  
        }  

在这里插入图片描述

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecure

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值