Queue 源码分析

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

本文也将围绕LinkedList进行分析,示例代码

    Queue<Integer> queue = new LinkedList<>();
    boolean add = queue.add(1);
    Integer element = queue.element();
    boolean offer = queue.offer(2);
    Integer peek1 = queue.peek();
    Integer poll = queue.poll();
    Integer remove = queue.remove();

⭐ add

   // 添加元素
	public boolean add(E e) {
        linkLast(e);
        return true;
    }
	// 往链表最后添加
    void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        // 当链表为空时,将新创建的node 作为第一个节点,否则做为其后驱节点,并将size ++
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

⭐ element

⭐ offer

其底层还是调用的add方法


⭐ peek

返回第一个元素但是不删除


⭐ poll

返回第一个元素并删除(不是空队列时删除)


⭐ remove

这里我可以发现 LinkeList 不是线程安全的,当我们需要使用线程安全的队列该如何做呢?当然JDK 自带了我们可以使用ArrayBlockingQueue, 下一篇我们将讲解ArrayBlockingQueue

Last updated

Was this helpful?