7-10 jmu-Java-05集合-01-ListIntegerStack 分数 15
时间: 2025-03-14 17:10:07 浏览: 31
### JMU Java 05 集合 ListIntegerStack 的实现及用法
#### 定义与功能描述
`ListIntegerStack` 是一种基于 `List` 接口的栈结构实现方式。它可以通过不同的具体实现类(如 `ArrayList` 或 `LinkedList`)来完成数据存储的功能。以下是两种主要实现方式及其特点:
1. **基于 ArrayList 的实现**
使用 `ArrayList` 来存储栈中的元素,其特点是随机访问效率高,但在频繁插入或删除操作时性能可能较差。由于栈的操作主要是顶部的压入和弹出,因此这种实现通常能够满足需求。
2. **基于 LinkedList 的实现**
使用 `LinkedList` 存储栈中的元素,其特点是两端增删操作的时间复杂度较低(O(1)),适合于需要大量动态调整大小的情况。然而,在某些场景下可能会因为额外的指针开销而导致内存占用增加[^2]。
#### 基于 LinkedList 的 IntegerStack 实现
下面是一个具体的实现示例,展示如何通过 `LinkedList` 构建 `IntegerStack` 类,并提供相应的测试代码。
```java
import java.util.LinkedList;
public class LinkedListIntegerStack {
private LinkedList<Integer> stack; // 内部使用LinkedList存储
public LinkedListIntegerStack() { // 构造函数初始化
this.stack = new LinkedList<>();
}
public void push(int value) { // 元素入栈
stack.addFirst(value);
}
public int pop() throws IllegalStateException { // 元素出栈
if (isEmpty()) throw new IllegalStateException("Stack is empty");
return stack.removeFirst();
}
public boolean isEmpty() { // 判断栈是否为空
return stack.isEmpty();
}
@Override
public String toString() { // 输出当前栈的内容
return stack.toString();
}
public static void main(String[] args) {
LinkedListIntegerStack stack = new LinkedListIntegerStack(); // 创建实例
try {
System.out.println("Pushing elements...");
stack.push(1); stack.push(3); stack.push(5); stack.push(7);
System.out.println("Current Stack: " + stack);
System.out.println("Popping elements...");
while (!stack.isEmpty()) {
System.out.print(stack.pop() + " ");
}
System.out.println("\nFinal Stack: " + stack);
} catch (IllegalStateException e) {
System.err.println(e.getMessage());
}
}
}
```
上述代码展示了如何利用 `LinkedList` 提供的方法(如 `addFirst()` 和 `removeFirst()`)快速构建一个支持基本栈操作的数据结构。
#### 测试代码修改注意事项
当从 `ArrayList` 转向 `LinkedList` 时,需要注意以下几点:
- 方法名称的变化:例如,`ArrayList` 中常用的是 `add()` 和 `remove(index)`,而 `LinkedList` 更倾向于使用 `addFirst()`/`addLast()` 及对应的移除方法。
- 性能差异的影响:对于大规模数据集,应评估不同实现下的时间复杂度表现[^5]。
#### JDK 文档建议的最佳实践
根据 JDK 文档推荐,选择合适的底层容器取决于实际应用场景的需求。如果更关注顺序遍历以及较少的中间位置更新操作,则优先考虑 `ArrayList`;而对于涉及较多头部或尾部操作的情形,选用 `LinkedList` 将更为合适。
---
阅读全文
相关推荐
















