Java中包含兩個(gè)基礎(chǔ)數(shù)據(jù)結(jié)構(gòu):棧(stack)和隊(duì)列(queue)。它們的實(shí)現(xiàn)方式使用了鏈表(LinkedList)和數(shù)組(Array)。LinkedList是一種使用鏈表實(shí)現(xiàn)的集合類型,我們通常簡稱為LL。LL是一個(gè)非常靈活的數(shù)據(jù)結(jié)構(gòu),可以很容易地實(shí)現(xiàn)棧和隊(duì)列。下面是一個(gè)使用LL實(shí)現(xiàn)的棧的例子:
import java.util.LinkedList; public class MyStack<T> { private LinkedList<T> list = new LinkedList<T>(); public void push(T item) { list.addFirst(item); } public T pop() { return list.removeFirst(); } public boolean isEmpty() { return list.isEmpty(); } public int size() { return list.size(); } public static void main(String[] args) { MyStack<Integer> stack = new MyStack<Integer>(); stack.push(1); stack.push(2); stack.push(3); while (!stack.isEmpty()) { System.out.println(stack.pop()); } } }
Java還包含另一個(gè)重要的概念:優(yōu)先級(jí)(priority)。優(yōu)先級(jí)指定了操作執(zhí)行的順序。在Java中,我們可以使用PriorityQueue來實(shí)現(xiàn)帶有優(yōu)先級(jí)的隊(duì)列。下面是一個(gè)使用PriorityQueue實(shí)現(xiàn)的帶有優(yōu)先級(jí)的任務(wù)隊(duì)列的例子:
import java.util.PriorityQueue; public class TaskQueue { private PriorityQueue<Task> queue = new PriorityQueue<Task>(); public void addTask(Task task) { queue.add(task); } public void process() { while (!queue.isEmpty()) { Task task = queue.poll(); task.execute(); } } public static void main(String[] args) { TaskQueue taskQueue = new TaskQueue(); taskQueue.addTask(new Task("task 1", 1)); taskQueue.addTask(new Task("task 2", 2)); taskQueue.addTask(new Task("task 3", 3)); taskQueue.addTask(new Task("task 4", 4)); taskQueue.process(); } } class Task implements Comparable<Task> { private String name; private int priority; public Task(String name, int priority) { this.name = name; this.priority = priority; } public void execute() { System.out.println("Executing task: " + name); } public int compareTo(Task other) { return priority - other.priority; } }
在上面的例子中,TaskQueue是一個(gè)任務(wù)隊(duì)列,它使用了一個(gè)PriorityQueue來存儲(chǔ)任務(wù)。每個(gè)任務(wù)都有一個(gè)名稱和一個(gè)優(yōu)先級(jí)。在加入任務(wù)時(shí),我們使用PriorityQueue的add()方法來保證任務(wù)按照優(yōu)先級(jí)順序排列。在處理任務(wù)時(shí),我們使用PriorityQueue的poll()方法來獲取具有最高優(yōu)先級(jí)的任務(wù)。