栈与队列理论基础
队列是先进先出,栈是先进后出。
在Java中,栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。以下是栈的基本操作以及对应的方法:
-
入栈(Push):将元素添加到栈的顶部。
对应方法:push(E item)
,将元素item
推入栈顶。 -
出栈(Pop):从栈的顶部移除并返回元素。
对应方法:pop()
,移除并返回栈顶元素。 -
查看栈顶元素(Peek):返回栈顶的元素,但不对栈进行修改。
对应方法:peek()
,返回栈顶元素,但不移除它。 -
判断栈是否为空:检查栈是否不包含任何元素。
对应方法:isEmpty()
,如果栈为空则返回true
,否则返回false
。
这些是栈的基本操作和对应的方法。在Java中,可以使用现有的类库来实现栈数据结构,如 java.util.Stack
类或使用更通用的 java.util.Deque
接口的实现类,例如 java.util.ArrayDeque
。
需要注意的是,java.util.Stack
类是线程安全的,但在一些情况下可能会导致性能下降。如果不需要线程安全性,可以考虑使用 java.util.Deque
接口的实现类,如 java.util.ArrayDeque
。
在Java中,队列(Queue)是一种遵循先进先出(FIFO)原则的数据结构。以下是队列的基本操作以及对应的方法:
-
入队(Enqueue):将元素添加到队列的末尾。
对应方法:offer(E e)
,将元素e
添加到队列的末尾。 -
出队(Dequeue):从队列的头部移除并返回元素。
对应方法:poll()
,移除并返回队列头部的元素。 -
查看队头元素(Peek):返回队列头部的元素,但不对队列进行修改。
对应方法:peek()
,返回队列头部的元素,但不移除它E element()
: 返回队列的头部元素,但不移除它。如果队列为空,则抛出异常。- 无论是
element()
方法还是peek()
方法,它们都用于返回队列的头部元素,但并不移除它。如果队列为空,则element()
方法会抛出一个异常,而peek()
方法则会返回null
。
- 无论是
-
判断队列是否为空:检查队列是否不包含任何元素。
对应方法:isEmpty()
,如果队列为空则返回true
,否则返回false
。 -
方法来自 Queue 接口:
boolean add(E e)
: 将指定元素添加到队列的尾部。如果添加成功,则返回true
;如果由于容量限制无法添加元素,则抛出异常。boolean offer(E e)
: 将指定元素添加到队列的尾部。如果添加成功,则返回true
;如果由于容量限制无法添加元素,则返回false
。E remove()
: 移除并返回队列的头部元素。如果队列为空,则抛出异常。E poll()
: 移除并返回队列的头部元素。如果队列为空,则返回null
。E element()
: 返回队列的头部元素,但不移除它。如果队列为空,则抛出异常。E peek()
: 返回队列的头部元素,但不移除它。如果队列为空,则返回null
。
这些是队列的基本操作和对应的方法。在Java中,可以使用现有的类库来实现队列数据结构,如 java.util.Queue
接口及其实现类,例如 java.util.LinkedList
或 java.util.ArrayDeque
。
需要注意的是,Queue
接口是一个抽象接口,它定义了队列的基本操作,但不能直接实例化。可以使用其实现类,如 LinkedList
或 ArrayDeque
来创建队列对象。
方法来自 LinkedList 类(除了 Queue 接口中定义的方法,还包括 LinkedList 类自身的方法):
void addFirst(E e)
: 将指定元素插入到队列的开头。void addLast(E e)
: 将指定元素插入到队列的末尾。E removeFirst()
: 移除并返回队列的第一个元素。E removeLast()
: 移除并返回队列的最后一个元素。E getFirst()
: 返回队列的第一个元素,但不移除它。E getLast()
: 返回队列的最后一个元素,但不移除它。
Deque
是一个双端队列(Double Ended Queue)接口,它扩展了 Queue
接口。Deque
接口提供了在队列两端进行插入、删除等操作的方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步