目录
LinkedList
LinkedList是Java中的一个重要的数据结构,它实现了List接口,提供了链表数据结构的实现。LinkedList类中包含了各种常用的链表操作,如添加、删除、查找等。
LinkedList的特点是元素可以动态地添加到链表的任意位置,并且链表中的元素可以按照它们被添加的顺序来遍历。由于LinkedList是基于链表实现的,因此它具有以下特点:
- 插入和删除操作可以在任何位置进行,时间复杂度为O(1)。
- 访问元素的操作可以在任何位置进行,时间复杂度为O(n)。
- 链表中的元素在内存中不是连续存储的,因此无法通过下标直接访问元素。
下面是一个简单的示例,演示如何使用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
实例
假设我们有一个学生名单,每个学生有一个名字和学号。我们想要创建一个可以添加、删除和查找学生的链表。
- 首先,我们需要创建一个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;
}
}
- 接下来,我们可以创建一个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());
}
}
}
- 输出:
- 现在,如果我们想在链表的特定位置插入一个新学生,我们可以使用add方法:
// 在指定位置插入新学生(位置为2)
studentList.add(2, new Student("Eve", 5));
-
在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 + "。");
}
- 根据学号查找学生,你可以使用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 + "。");
}