• Java学习笔记——Collection之Queue


    目录

    一、Queue

    二、Deque

    (一)LinkedList

    (二) ArrayDeque

    (三)PriorityQueue

    (四)常见方法的区别

    三、代码

    1、Queue

    2、Deque

    3、PriorityQueue


    Queue与List、Set接口并列的Collection的三大接口之一,是一种常见的数据结构,遵循先进先出的原则。

    一、Queue

    Queue是队列,只能一头进,另一头出。其可由LinkedList实现。

    其常见方法:

    • poll():将队首的元素删除,并返回该元素。
    • peek():返回队首的元素,但不进行删除操作。
    • offer():将元素添加到队尾,如果成功,则返回true。

    二、Deque

    Deque 是JDK 1.6出来的一个新接口,它是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。

    (一)LinkedList

    双端队列可使用LinkedList实现,代码实例:

    1. // 队列的创建
    2. Queue queue = new LinkedList<>();
    3. // 添加元素
    4. System.out.println("------offer():添加元素------");
    5. queue.offer("Java");
    6. queue.offer("Python");
    7. queue.offer("C");
    8. queue.offer("PHP");
    9. System.out.println(queue);
    10. // 删除元素
    11. System.out.println("------poll(): 删除元素------");
    12. System.out.println("删除的元素: " + queue.poll());
    13. System.out.println(queue);
    14. // 访问元素
    15. System.out.println("------peek(): 访问元素------");
    16. System.out.println("访问的元素: " + queue.peek());
    17. System.out.println(queue);
    18. // 遍历
    19. System.out.println("------遍历------");
    20. for (String q: queue){
    21. System.out.println(q);
    22. }
    1. ------offer():添加元素------
    2. [Java, Python, C, PHP]
    3. ------poll(): 删除元素------
    4. 删除的元素: Java
    5. [Python, C, PHP]
    6. ------peek(): 访问元素------
    7. 访问的元素: Python
    8. [Python, C, PHP]
    9. ------遍历------
    10. Python
    11. C
    12. PHP

    (二) ArrayDeque

    双端队列也可使用ArrayDeque实现,例如:

    1. Deque deque = new ArrayDeque<>();
    2. // 添加元素
    3. deque.addFirst("I"); // 添加头部
    4. deque.addLast("Love"); // 添加尾部
    5. deque.addLast("Java");
    6. System.out.println(deque);
    7. System.out.println("------get()------");
    8. System.out.println(deque.getFirst()); // Java 获取头
    9. System.out.println(deque.getLast()); // I 获取尾
    10. System.out.println("--------poll()-------");
    11. System.out.println(deque.poll()); // 弹出栈顶元素
    12. System.out.println("--------push()-------");
    13. deque.push("Python"); // 此时第一个元素为LanQiao
    14. System.out.println(deque.pollFirst());// 弹出头 LanQiao
    15. System.out.println(deque.pollLast()); // 弹出尾 I
    16. deque.addFirst("PHP");
    17. System.out.println("--------peek()--------");
    18. System.out.println(deque.peek()); // 等价于peekFirst(),取出队头元素,但是队列中还是存在该元素
    19. System.out.println(deque.peekFirst());
    20. System.out.println(deque.peekLast());
    21. System.out.println(deque.size()); // 长度还是2
    22. System.out.println("=======real remove=========");
    23. System.out.println(deque.poll()); // poll才是真正的remove
    24. System.out.println(deque.size());
    1. [I, Love, Java]
    2. ------get()------
    3. I
    4. Java
    5. --------poll()-------
    6. I
    7. --------push()-------
    8. Python
    9. Java
    10. --------peek()--------
    11. PHP
    12. PHP
    13. Love
    14. 2
    15. =======real remove=========
    16. PHP
    17. 1

    (三)PriorityQueue

    PriorityQueue保存队列元素的顺序并不是按照加入的顺序,而是按照队列元素的大小进行排序的。
    PriorityQueue不允许插入null元素。

    1. PriorityQueue deque = new PriorityQueue<>();
    2. deque.add(5);
    3. deque.add(9);
    4. deque.add(1);
    5. deque.add(-5);
    6. System.out.println(deque);
    [-5, 1, 5, 9]

    (四)常见方法的区别

    (1)add() && offer()

    • 相同点:add()和offer()都是向队列中添加一个元素;
    • 不同点:若队列有大小限制且已满,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false;

    (2)poll() && remove()

    • 相同点:remove() 和 poll() 方法都是从队列中删除第一个元素;
    • 不同点:若队列为空时,调用remove()会抛出异常,调用poll() 方法返回 null;

    (3)element() && peek()

    • 相同点:element() 和 peek() 用于在队列的头部查询元素;
    • 不同点:若队列为空时,element() 抛出一个异常,而 peek() 返回 null。

    三、代码

    1、Queue

    1. import java.util.LinkedList;
    2. import java.util.Queue;
    3. public class Day27 {
    4. public static void main(String[] args){
    5. // 队列的创建
    6. Queue queue = new LinkedList<>();
    7. // 添加元素
    8. System.out.println("------offer():添加元素------");
    9. queue.offer("Java");
    10. queue.offer("Python");
    11. queue.offer("C");
    12. queue.offer("PHP");
    13. System.out.println(queue);
    14. // 删除元素
    15. System.out.println("------poll(): 删除元素------");
    16. System.out.println("删除的元素: " + queue.poll());
    17. System.out.println(queue);
    18. // 访问元素
    19. System.out.println("------peek(): 访问元素------");
    20. System.out.println("访问的元素: " + queue.peek());
    21. System.out.println(queue);
    22. // 遍历
    23. System.out.println("------遍历------");
    24. for (String q: queue){
    25. System.out.println(q);
    26. }
    27. }
    28. }

    2、Deque

    1. import java.util.ArrayDeque;
    2. import java.util.Deque;
    3. public class Day28 {
    4. public static void main(String[] args){
    5. Deque deque = new ArrayDeque<>();
    6. // 添加元素
    7. deque.addFirst("I"); // 添加头部
    8. deque.addLast("Love"); // 添加尾部
    9. deque.addLast("Java");
    10. System.out.println(deque);
    11. System.out.println("------get()------");
    12. System.out.println(deque.getFirst()); // Java 获取头
    13. System.out.println(deque.getLast()); // I 获取尾
    14. System.out.println("--------poll()-------");
    15. System.out.println(deque.poll()); // 弹出栈顶元素
    16. System.out.println("--------push()-------");
    17. deque.push("Python"); // 此时第一个元素为LanQiao
    18. System.out.println(deque.pollFirst());// 弹出头 LanQiao
    19. System.out.println(deque.pollLast()); // 弹出尾 I
    20. deque.addFirst("PHP");
    21. System.out.println("--------peek()--------");
    22. System.out.println(deque.peek()); // 等价于peekFirst(),取出队头元素,但是队列中还是存在该元素
    23. System.out.println(deque.peekFirst());
    24. System.out.println(deque.peekLast());
    25. System.out.println(deque.size()); // 长度还是2
    26. System.out.println("=======real remove=========");
    27. System.out.println(deque.poll()); // poll才是真正的remove
    28. System.out.println(deque.size());
    29. }
    30. }

    3、PriorityQueue

    1. import java.util.PriorityQueue;
    2. public class Day29 {
    3. public static void main(String[] args){
    4. PriorityQueue deque = new PriorityQueue<>();
    5. deque.add(5);
    6. deque.add(9);
    7. deque.add(1);
    8. deque.add(-5);
    9. System.out.println(deque);
    10. }
    11. }
  • 相关阅读:
    如何使用高压放大器驱动高容性负载
    Matlab|考虑可再生能源消纳的电热综合能源系统日前经济调度模型
    七、文件包含漏洞
    学生用RockyLinux9.2模板虚拟机说明
    微任务和宏任务
    VUE本地idea启动
    A component required a bean of type ‘XXX‘ that could not be found 解决办法
    猿创征文 | Git的良心教程
    FFplay文档解读-20-音频过滤器五
    acwing.台阶-nim游戏
  • 原文地址:https://blog.csdn.net/weixin_45666660/article/details/126035087