Queue :基本上,一个队列就是一个先入先出(FIFO)的数据结构
Queue接口与List、Set同一级别,都是继承了Collection接口。
队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头都是调用 remove() 或 poll() 所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个 Queue 实现必须指定其顺序属性。
1、add(E e) :将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。
2、remove() :获取并移除此队列的头。
// add() 和 remove() 方法会在失败的时候抛出异常,不推荐使用
Queue<String> queue = new LinkedList<>();
queue.add("A君");
queue.add("B君");
System.out.println("add(): " + queue);
queue.remove();
System.out.println("remove(): " + queue);
输出结果如下:
3、offer(E e) :将指定的元素插入此队列(如果立即可行且不会违反容量限制),如果添加成功,则返回 true;否则返回 false。
4、poll() :获取并移除此队列的头,如果此队列为空,则返回 null。
// 添加元素
queue.offer("C君");
queue.offer("D君");//经常使用此方法添加元素而非add()
queue.offer("E君");
System.out.println("offer(): " + queue);
// 获取并且移除此队列的头
String str = queue.poll();
System.out.println("poll= " + str);
System.out.println("poll(): " + queue);
输出结果如下:
5、peek():获取但不移除此队列的头;如果此队列为空,则返回 null。
6、element():获取,但是不移除此队列的头。此方法与 peek 唯一的不同在于:此队列为空时将抛出一个异常。
System.out.println("---------------------");
// 获取但不移除此队列的头
System.out.println("element= " + queue.element());
System.out.println(queue);
System.out.println("---------------------");
// 获取但不移除此队列的头
System.out.println("peek= " + queue.peek());
System.out.println(queue);
System.out.println("---------------------");
输出结果如下: