Java中栈的相关函数
时间: 2025-08-19 08:14:16 浏览: 11
### Java 中与栈相关的函数和方法
#### 1. **`Stack<T>` 类**
`Stack<T>` 是 `Vector<T>` 的子类,提供了基本的栈操作功能。以下是常用的方法及其说明:
- **`push(E item)`**: 向栈顶压入一个元素。
```java
Stack<Integer> stack = new Stack<>();
stack.push(1);
```
- **`pop()`**: 移除并返回栈顶元素。如果栈为空,则抛出异常。
```java
int topElement = stack.pop();
```
- **`peek()`**: 返回栈顶元素而不移除它。如果栈为空,则抛出异常。
```java
int topElement = stack.peek();
```
- **`empty()`**: 如果栈为空则返回 `true`,否则返回 `false`。
```java
boolean isEmpty = stack.empty();
```
- **`search(Object o)`**: 返回指定对象在栈中的位置(从栈顶开始计数),如果没有找到该对象,则返回 `-1`[^2]。
---
#### 2. **`ArrayDeque<T>` 类作为栈实现**
虽然 `Stack<T>` 被认为过时,但可以使用双向队列 `ArrayDeque<T>` 来模拟栈的行为。其性能优于传统的 `Stack<T>` 实现。
- **`addFirst(E e)` 或 `offerFirst(E e)`**: 添加元素到双端队列的一端(相当于栈的 push 操作)。
```java
ArrayDeque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1); // 等价于 push
```
- **`removeFirst()` 或 `pollFirst()`**: 删除并返回第一个元素(相当于栈的 pop 操作)。如果队列为空,`removeFirst()` 抛出异常而 `pollFirst()` 返回 null。
```java
Integer element = deque.removeFirst(); // 等价于 pop
```
- **`getFirst()` 或 `peekFirst()`**: 查看第一个元素而不删除它(相当于栈的 peek 操作)。如果队列为空,`getFirst()` 抛出异常而 `peekFirst()` 返回 null。
```java
Integer firstElement = deque.getFirst(); // 等价于 peek
```
---
#### 3. **其他辅助方法**
- **`isEmpty()`**: 判断容器是否为空。
```java
boolean empty = deque.isEmpty();
```
- **`size()`**: 获取当前栈中元素的数量。
```java
int size = deque.size();
```
---
#### 示例代码:使用 `ArrayDeque` 模拟栈
```java
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static void main(String[] args) {
Deque<Integer> stack = new ArrayDeque<>();
// Push elements onto the stack
stack.addFirst(10);
stack.addFirst(20);
System.out.println("Top of stack: " + stack.peekFirst());
// Pop an element from the stack
int poppedValue = stack.pollFirst();
System.out.println("Popped value: " + poppedValue);
// Check if the stack is empty
System.out.println("Is stack empty? " + stack.isEmpty());
}
}
```
---
#### 功能扩展:自定义栈类
可以通过继承或组合的方式创建自己的栈类,并封装所需的功能。
```java
import java.util.ArrayList;
import java.util.List;
class CustomStack<T> {
private List<T> data = new ArrayList<>();
public void push(T item) {
data.add(item);
}
public T pop() {
if (data.isEmpty()) throw new IllegalStateException("Stack is empty");
return data.remove(data.size() - 1);
}
public T peek() {
if (data.isEmpty()) throw new IllegalStateException("Stack is empty");
return data.get(data.size() - 1);
}
public boolean isEmpty() {
return data.isEmpty();
}
}
// 使用示例
CustomStack<String> customStack = new CustomStack<>();
customStack.push("A");
System.out.println(customStack.pop()); // 输出 A
```
---
阅读全文
相关推荐



















