java lifo 队列_【Java源码】集合类-队列Queue

本文介绍了Java中的Queue接口及其常用实现,如PriorityQueue、ArrayDeque和LinkedList。Queue遵循先进先出(FIFO)原则,提供add/offer、remove/poll等操作。此外,还讲解了Deque接口,它是Queue的子接口,允许在两端进行操作,同时也可作为栈使用。对比Stack类,Deque在非线程安全场景下提供了更好的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、描述

队列Queue这种数据结构,通常指先进先出(FIFO)这种容器。可以模拟生活中依次排队这种场景。

下面是集合体系继承树:

61ebf653a3462a156cb4c71dbd5f65f0.png

二、Queue

Queue和List一样都是Collection的子接口。

Queue源码定义:

public interface Queue extends Collection {

boolean add(E e);

boolean offer(E e);

E remove();

E poll();

E element();

E peek();

}

add(E e)/offer(E e) 将指定元素加入到队列尾部

remove() 返回队列头部元素并删除,如果队列为空,会抛NoSuchElementException

poll() 返回队列头部元素并删除,如果队列为空,返回null

element() 返回队列头部元素不删除,如果队列为空,会抛NoSuchElementException

peek() 返回队列头部元素不删除,如果队列为空,返回null

Queue的实现有PriorityQueue、ArrayDeque、LinkedList。其中ArrayDeque、LinkedList是实现的其子接口Deque。

三、Deque

从上面的继承图可以清楚的看到,Deque是Queue的子接口,它不仅是队列的数据结构,也是一个双端队列数据结构,同时也是一个栈(stack)的数据结构。

Deque源码定义:

public interface Deque extends Queue {

void addFirst(E e);

void addLast(E e);

boolean offerFirst(E e);

boolean offerLast(E e);

E removeFirst();

E removeLast();

E pollFirst();

E pollLast();

E getFirst();

E getLast();

E peekFirst();

E peekLast();

boolean removeFirstOccurrence(Object o);

boolean removeLastOccurrence(Object o);

// *** Queue methods ***

boolean add(E e);

boolean offer(E e);

E remove();

E poll();

E element();

E peek();

// *** Stack methods ***

void push(E e);

E pop();

// *** Collection methods ***

boolean remove(Object o);

boolean contains(Object o);

public int size();

Iterator iterator();

Iterator descendingIterator();

}

Deque的接口和上面的Queue的操作基本相同。xxxFirst操作队列头部元素,xxxLast操作队列尾部元素。

另外Deque可以表示一个栈(stack):具有后进先出(LIFO)的特征。

push(E e) 入栈

pop() 出栈,如果栈为空时出栈会抛出NoSuchElementException异常,所以在出栈之前先peek()查看头部元素,如果栈为空会返回null.

Stack类

Java中还有一个Stack类,这个类继承Vector。

public class Stack extends Vector {

从源码中可以看到Stack的pop()和peek()方法都是被synchronized修饰的。因此Stack的栈是线程安全的,但也因此降低了栈的性能。所以当我们不需要线程安全的场景时,应该用Deque.

public synchronized E peek()

public synchronized E pop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值