知易通
第二套高阶模板 · 更大气的阅读体验

数据结构的Java实现:从数组到链表的实际应用

发布时间:2025-12-22 12:40:24 阅读:222 次

数组:最基础的数据存储方式

在开发一个学生成绩管理系统时,最开始可能只是想把几个分数存起来看看平均值。这时候用数组是最直接的办法。Java中的数组一旦创建大小就固定了,适合那种数据量明确、变动不大的场景。

int[] scores = {85, 92, 78, 96, 88};
int sum = 0;
for (int score : scores) {
    sum += score;
}
double average = (double) sum / scores.length;
System.out.println("平均分:" + average);

ArrayList:动态扩容更灵活

后来系统要支持随时添加新学生,数组的固定长度就成了瓶颈。换成ArrayList,就不需要提前确定容量,添加元素时自动扩容,写起来也更顺手。

import java.util.ArrayList;

ArrayList<String> students = new ArrayList<>();
students.add("张三");
students.add("李四");
students.add("王五");

// 中间插入
students.add(1, "赵六");

System.out.println(students); // [张三, 赵六, 李四, 王五]

链表的实际用途:处理不确定顺序的操作

有次接到需求,要做一个任务队列,某些任务可以插队,有些要取消。用LinkedList比ArrayList更适合,因为它的插入和删除效率更高,不需要像数组那样整体移动元素。

import java.util.LinkedList;

LinkedList<String> tasks = new LinkedList<>();
tasks.add("生成报表");
tasks.add("备份数据");
tasks.add("发送邮件");

// 紧急任务插队
tasks.addFirst("修复线上bug");

// 取消最后一个任务
tasks.removeLast();

System.out.println("当前任务列表:" + tasks);

栈的应用:撤销操作怎么实现

做一个简单的文本编辑器时,用户希望按Ctrl+Z能一步步撤回输入。这种“后进先出”的逻辑,正好用栈来处理。Java里可以用ArrayDeque当栈用,比老的Stack类性能更好。

import java.util.ArrayDeque;

ArrayDeque<String> history = new ArrayDeque<>();
history.push("第一次输入:Hello");
history.push("第二次输入:World");
history.push("第三次修改:Hello World!");

// 撤销
String lastAction = history.pop();
System.out.println("撤销:" + lastAction);

队列:处理排队请求

在做一个在线抢课系统时,大量用户同时提交选课请求。不能一下子全处理,得按顺序来。用Queue把请求排起来,一个个消费,避免服务器被压垮。

import java.util.LinkedList;
import java.util.Queue;

Queue<String> requests = new LinkedList<>();
requests.offer("用户A选课:数学");
requests.offer("用户B选课:英语");
requests.offer("用户C选课:物理");

while (!requests.isEmpty()) {
    String req = requests.poll();
    System.out.println("正在处理:" + req);
}