Stack在Java中实现
在Java中,栈是一种后进先出(LIFO,Last In First Out)的数据结构。这意味着最后放入栈中的元素将最先被移除。栈的主要操作有两个:入栈(push)和出栈(pop)。除此之外,栈还可以用于查看栈顶元素。
栈的主要操作
- push:将元素添加到栈顶。
- pop:移除并返回栈顶元素。如果栈为空,通常会抛出异常。
- peek:查看栈顶元素,
但不移除它
。如果栈为空,通常会抛出异常。 - isEmpty:检查栈是否为空。
- size:获取栈中元素的数量(可选)。
Java中的栈实现
Java标准库提供了一个 Stack
类,这是 Vector
类的子类。虽然可以使用 Stack
类来实现栈,但更推荐使用 Deque 接口的实现
,例如 ArrayDeque
,因为它们在性能上通常更优。
使用 Stack
类示例
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println("栈顶元素: " + stack.peek()); // 输出栈顶元素
System.out.println("出栈元素: " + stack.pop()); // 输出并移除栈顶元素
System.out.println("栈是否为空: " + stack.isEmpty());
}
}
使用 ArrayDeque
示例
import java.util.ArrayDeque;
import java.util.Deque;
public class StackExample {
public static void main(String[] args) {
Deque<Integer> stack = new ArrayDeque<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println("栈顶元素: " + stack.peek()); // 输出栈顶元素
System.out.println("出栈元素: " + stack.pop()); // 输出并移除栈顶元素
System.out.println("栈是否为空: " + stack.isEmpty());
}
}
Queue在Java中实现
在Java中,Queue
是一个用于存储元素的集合数据结构,遵循先进先出(FIFO,First-In-First-Out)的原则。这意味着最早插入的元素最先被移除。Queue
接口是 Java Collections Framework 的一部分,它位于 java.util
包中。
主要特性
- FIFO 语义:元素的处理顺序是按照它们被添加的顺序。
- 插入和删除:常见操作包括添加元素(enqueue)和移除元素(dequeue)。
- 可扩展:
Queue
接口有多个实现,例如LinkedList
、PriorityQueue
和ArrayDeque
。
常用的方法
add(E e)
:将元素插入队列,如果队列满则抛出异常。offer(E e)
:将元素插入队列,如果队列满则返回false
。remove()
:移除并返回队列头部的元素。如果队列为空,则抛出异常。poll()
:移除并返回队列头部的元素,如果队列为空则返回null
。peek()
:返回队列头部的元素,且不移除。若队列为空,返回null
。size()
:返回队列中的元素数量。isEmpty()
:判断队列是否为空。
常见实现
-
LinkedList:支持双向链表,适合频繁的队列操作。
Queue<Integer> queue = new LinkedList<>(); queue.offer(1); queue.offer(2); System.out.println(queue.poll()); // 输出 1
-
PriorityQueue:按照自然顺序或自定义排序顺序存储元素,适合需要优先级处理的场景。
Queue<Integer> priorityQueue = new PriorityQueue<>(); priorityQueue.offer(2); priorityQueue.offer(1); System.out.println(priorityQueue.poll()); // 输出 1
-
ArrayDeque:基于动态数组实现,性能优越且可以在两端插入和删除。
Deque<Integer> deque = new ArrayDeque<>(); deque.offer(1); deque.offer(2); System.out.println(deque.poll()); // 输出 1
总结
Queue
是一个非常实用的接口,适用于许多需要顺序处理的场景,如任务调度、消息传递等。通过不同的实现类,可以根据需求选择合适的队列类型。