回答重點
棧(Stack):遵循后進先出(LIFO,Last In,First Out)原則。即,最后插入的元素最先被移除。主要操作包括push(入棧)和pop(出棧)。Java中的Stack類(java.util.Stack)實現了這個數據結構
public class StackTest {public static void main(String[] args) {Stack<String> stack = new Stack<>();stack.push("apple");stack.push("banana");stack.push("orange");System.out.println(stack);stack.pop();System.out.println(stack);System.out.println(stack.peek());stack.forEach(System.out::println);}
}
隊列(Queue):遵循先進先出(FIFO,First In,First Out)原則。即,最早插入的元素最先被移除。主要操作包括enqueue(入隊)和dequeue(出隊)。Java中的Queue接口(java.util.Queue)提供了此數據結構的實現,如LinkedList和PriorityQueue
public class QueueTest {public static void main(String[] args) {Queue<String> queue = new LinkedList<>();queue.addAll(Arrays.asList("apple", "banana", "orange", "grape"));queue.forEach(System.out::println);}
}
使用場景:
- 棧:常用于函數調用、表達式求值、回溯算法(如深度優先搜索)等場景
- 隊列:常用于任務調度、資源管理、數據流處理(如廣度優先搜索)等場景
擴展知識
棧的變體:
- 雙端隊列(Deque):支持在兩端插入和刪除元素,可以用作棧或隊列。java.util.ArrayDeque和java.util.LinkedList都實現了Deque接口,提供了棧和隊列功能
隊列的變體:
- 優先隊列(PriorityQueue):隊列中的元素按優先級排序,而不是按插入排序。適用于需要按優先級處理任務的場景
- 阻塞隊列(BlockingQueue):支持阻塞操作,特備適合多線程環境中的生產者-消費者問題。常用實現包括ArrayBlockingQueue、LinkedBlokingQueue和PrioriryBlockingQueue