(使用继承实现 GenericStack)程序清单 19-1中,GenericStack 是使用组合实现的。定义一个新的继承自 ArrayList的栈类。画出 UML类图,然后实现GenericStack。编写一个测试.程序,提亦用户输人5个字符串,然后以逆序显示它们。
时间: 2024-10-27 08:14:40 浏览: 24
Java进阶--深入理解ArrayList实现原理
首先,让我们理解一下问题:您希望创建一个名为`GenericStack`的栈类,它是一个通用类型的栈,继承自`ArrayList`并使用组合(Composition)来实现。这个类将需要添加元素、移除顶部元素以及查看顶部元素等操作。以下是程序清单示例:
```java
// 创建GenericStack的UML类图
+----------------+
| GenericStack<T> |
+----------------+
| - elements | // 组成属性,存储所有元素
| + add(T item) | // 添加元素到栈顶
| + pop() | // 移除并返回栈顶元素
| + peek() | // 返回栈顶元素但不移除
+----------------+
// GenericStack的具体实现(继承自ArrayList)
public class GenericStack<T> extends ArrayList<T> {
public void add(T item) {
super.add(item);
}
public T pop() {
if (isEmpty()) {
throw new EmptyStackException();
}
return super.remove(size() - 1); // 弹出最后一个元素
}
public T peek() {
if (isEmpty()) {
throw new EmptyStackException();
}
return super.get(size() - 1); // 返回栈顶元素
}
}
// 测试代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
GenericStack<String> stack = new GenericStack<>();
for (int i = 0; i < 5; i++) {
System.out.println("请输入第" + (i + 1) + "个字符串:");
stack.add(scanner.nextLine());
}
while (!stack.isEmpty()) {
System.out.println("倒序输出: " + stack.pop()); // 从后向前打印
}
scanner.close();
}
```
在这个例子中,我们定义了一个泛型类`GenericStack`,它继承了`ArrayList`,并将存储的数据视为列表中的元素。通过`add`、`pop`和`peek`方法,我们可以实现栈的基本操作。
阅读全文