Java中隊列的使用


Java中隊列的使用

  • 注意事項
  • curd
    • create
      • add(obj): 增加一個元素,如果隊列已滿,則拋出異常
      • offer(obj): 添加一個元素並返回true,如果隊列已滿,則返回false
    • update
      • set(index, obj)
    • retrieve
      • element(): 返回隊列頭部的元素,如果隊列為空,則拋出一個NoSuchElementException異常
      • peek(): 返回隊列頭部的元素,如果隊列為空,則返回null
    • delete
      • remove(): 移除並返回隊列頭部的元素,如果隊列為空,則拋出一個NoSuchElementException異常
      • poll(): 移除並返問隊列頭部的元素,如果隊列為空,則返回null
  • 樣例
  • 內部實現
    • 內部類 Node
    • 雙向鏈表,有頭尾指針
    • 查找的時候會根據 index 決定用 head 往后還是用 last 往前

注意事項

  • java.util.Queue是一個抽象類,不能實例化
  • java.util.LinkedList實現了Queue,可以當作隊列來使用

樣例

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode類 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        // write code here
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        if (root == null) return res;
        LinkedList<TreeNode> nodes = new LinkedList<>();
        nodes.add(root);
        while (!nodes.isEmpty()) {
            int n = nodes.size();
            ArrayList<Integer> layer = new ArrayList<>(n);
            for (int i = 0; i < n; i++) {
                TreeNode head = nodes.poll();
                
                layer.add(head.val);
                if (head.left != null) nodes.add(head.left);
                if (head.right != null) nodes.add(head.right);
                
            }
            res.add(layer);
        }
        return res;
        
    }
}

內部實現

LinkedList 底層實現

參考

java中queue的使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM