首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java LinkedList 實現棧與隊列:原理與代碼實戰

     編輯:Java 綜合教學

為什麼選 LinkedList?

LinkedList 實現了 Deque 雙端隊列介面,提供 addFirst/addLast、removeFirst/removeLast 等 O(1) 頭尾操作,**天然適合模擬棧(LIFO)和隊列(FIFO)**,且無容量上限。

統一封裝類設計

public class MyStackOrQueue<E> {
    private final LinkedList<E> list = new LinkedList<>();
    private final boolean isStack; // true=棧, false=隊列

    public MyStackOrQueue(boolean isStack) { this.isStack = isStack; }

    public void push(E e) { list.addLast(e); } // 入棧/入隊均尾插

    public E pop() {
        return isStack ? list.removeLast() : list.removeFirst(); // 棧取尾,隊列取頭
    }

    public boolean isEmpty() { return list.isEmpty(); }
}

測試驗證

public static void main(String[] args) {
    // 測試隊列 FIFO
    MyStackOrQueue<String> queue = new MyStackOrQueue<>(false);
    queue.push("abc1");
    queue.push("abc2");
    queue.push("abc3");
    while (!queue.isEmpty()) {
        System.out.println("Queue: " + queue.pop()); // abc1, abc2, abc3
    }

    // 測試棧 LIFO
    MyStackOrQueue<String> stack = new MyStackOrQueue<>(true);
    stack.push("abc1");
    stack.push("abc2");
    stack.push("abc3");
    while (!stack.isEmpty()) {
        System.out.println("Stack: " + stack.pop()); // abc3, abc2, abc1
    }
}

圖解數據流向

隊列模擬

棧模擬

擴展:JDK 內建替代品

  • 棧:Deque<E> stack = new ArrayDeque<>(); (官方推薦,非線程安全,性能優於 Stack)。
  • 隊列:Queue<E> q = new LinkedList<>(); 或 ArrayDeque。
  • 線程安全:ConcurrentLinkedQueue、ArrayBlockingQueue 等。

總結

理解 LinkedList 雙端操作特性,即可靈活構建棧/隊列。實際開發優先使用 ArrayDeque 替代舊有 Stack 和 Vector。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved