Java队列

40 阅读1分钟

Queue

public interface Queue<E> extends Collection<E> {

Dqueue

public interface Deque<E> extends Queue<E>, SequencedCollection<E> {

ArrayQueue

public class ArrayDeque<E> extends AbstractCollection<E>
                           implements Deque<E>, Cloneable, Serializable

AbstractQueue

public abstract class AbstractQueue<E>
    extends AbstractCollection<E>
    implements Queue<E> {

PriorityQueue

public class PriorityQueue<E> extends AbstractQueue<E>
    implements java.io.Serializable {

Queue的操作:

队尾添加元素:add(已满抛出异常)、offer(已满返回false)、 队头删除元素:remove(为空抛出异常)、poll(为空返回null)、 获取头部元素:element(为空抛出异常)、peek(为空返回null)、

Deque

添加元素:addFirst、addLast、offerFirst、offerLast 删除元素:removeFirst、removeLast、pollFirst、pollLast 获取元素:getFirst、getLast、peekFirst、peekLast

BlockingQueue

image.png

image.png

  • PriorityBlockingQueue
public class PriorityBlockingQueue<E> extends AbstractQueue<E>
    implements BlockingQueue<E>, java.io.Serializable {
  • DelayQueue
public class DelayQueue<E extends Delayed> extends AbstractQueue<E>
    implements BlockingQueue<E> {

    private final transient ReentrantLock lock = new ReentrantLock();
    private final PriorityQueue<E> q = new PriorityQueue<E>();

Vector

public class PriorityQueue<E> extends AbstractQueue<E>
    implements java.io.Serializable {

Stack

public class Stack<E> extends Vector<E> {

Java双端队列

可以使用 ArrayDeque,LinkedList

  • LinkedList定义
Java
复制代码
public class LinkedList<E> extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
  • ArrayDeque定义
Java
复制代码
public class ArrayDeque<E> extends AbstractCollection<E>
                           implements Deque<E>, Cloneable, Serializable
  • 代码
Java
复制代码
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.LinkedList;

public class TestDeque {
    public static void main(String[] args) {
        java.util.Deque<Integer> dq = new LinkedList<>();
        dq.offerLast(5);
        dq.offerLast(6);
        dq.offerFirst(3);
        dq.offerFirst(1);
        String ret = Arrays.toString(dq.toArray());//[1, 3, 5, 6]
        System.out.println(ret);
        Integer a = dq.peekFirst();
        Integer b = dq.peekLast();
        Integer c = dq.peek();

        System.out.println(Arrays.toString(new Integer[]{a, b, c}));//[1, 6, 1]
        Integer d = dq.pollFirst();
        Integer e = dq.pollLast();
        Integer f = dq.poll();
        System.out.println(Arrays.toString(new Integer[]{d, e, f}));//[1, 6, 3]

    }
}