什么是队列?
    队列是一种特殊的线性表,遵循先入先出、后入后出(FIFO:First In First Out)的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是 java 的某些队列运行在任何地方插入删除;比如我们常用的 LinkedList集合,它实现了Queue接口,因此,我们可以理解为 LinkedList就是一个队列。
    image.png
    在Java的标准库中,队列接口Queue定义了以下几个方法:

    • int size():获取队列长度;
    • boolean add(E)/boolean offer(E):添加元素到队尾;
    • E remove()/E poll():获取队首元素并从队列中删除;
    • E element()/E peek():获取队首元素但并不从队列中删除。

    对于具体的实现类,有的Queue有最大队列长度限制,有的Queue没有。注意到添加、删除和获取队列元素总是有两个方法,这是因为在添加或获取元素失败时,这两个方法的行为是不同的。我们用一个表格总结如下:

    throw Exception 返回false或null
    添加元素到队尾 add(E e) boolean offer(E e)
    取队首元素并删除 E remove() E poll()
    取队首元素但不删除 E element() E peek()

    注意:不要把null添加到队列中,否则poll()方法返回null时,很难确定是取到了null元素还是队列为空。

    1. package com.hanliukui.collection;
    2. import java.util.LinkedList;
    3. import java.util.Queue;
    4. /**
    5. * @Author hanliukui
    6. * @Date 2022/5/7 15:32
    7. * @Description xxx
    8. */
    9. public class QueueTest {
    10. public static void main(String[] args) {
    11. Queue<String> queue = new LinkedList<>();
    12. System.out.println("添加元素到队尾...");
    13. // 添加元素到队尾
    14. queue.add("aaa");
    15. queue.add("bbb");
    16. queue.add("ccc");
    17. // 添加元素到队尾
    18. queue.offer("ddd");
    19. queue.offer("eee");
    20. queue.offer("fff");
    21. System.out.println("遍历打印...");
    22. for (String s : queue) {
    23. System.out.println(s);
    24. }
    25. System.out.println("获取队头元素(不删除)...");
    26. System.out.println(queue.element());
    27. System.out.println(queue.peek());
    28. System.out.println("遍历打印...");
    29. for (String s : queue) {
    30. System.out.println(s);
    31. }
    32. System.out.println("获取队头元素(删除)...");
    33. System.out.println(queue.remove());
    34. System.out.println(queue.poll());
    35. System.out.println("遍历打印...");
    36. for (String s : queue) {
    37. System.out.println(s);
    38. }
    39. }
    40. }
    1. 添加元素到队尾...
    2. 遍历打印...
    3. aaa
    4. bbb
    5. ccc
    6. ddd
    7. eee
    8. fff
    9. 获取队头元素(不删除)...
    10. aaa
    11. aaa
    12. 遍历打印...
    13. aaa
    14. bbb
    15. ccc
    16. ddd
    17. eee
    18. fff
    19. 获取队头元素(删除)...
    20. aaa
    21. bbb
    22. 遍历打印...
    23. ccc
    24. ddd
    25. eee
    26. fff