我们知道Stack的基本特性是:只能对其顶部的元素进行操作(先进后出)
下面我们利用泛型写一个泛型Stack,实现所有类型的push(弹入)和pop(弹出)
代码很简单:
public class Stack<T> {
//嵌套一个Java已有的集合类LinkedList来实现Stack
private LinkedList<T> container = new LinkedList<>();
//弹入元素
public void push(T t) {
container.addFirst(t);
}
//弹出元素
public T pop() {
return container.removeFirst();
}
//判断栈容量是否为空
public boolean empty() {
return container.isEmpty();
}
}
这个泛型类的实例可以用于存储所有引用类型的元素,并对其进行弹入和弹出操作,这体现了泛型的一个特性:面对类型编程。
上面的实现是通过简单的泛型类的组合构建的泛型类,实际上很多时候,这种方式的安全性要比纯底层构建泛型类高。
测试:
public class StackTest {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
System.out.println("向栈中增加字符串:");
System.out.println("Java大法");
System.out.println("细说Java");
System.out.println("Java从入门到精通(第2版)");
stack.push("Java大法");
stack.push("细说Java");
stack.push("Java从入门到精通(第2版)");
System.out.println("从栈中取出字符串:");
while (!stack.empty()) {
//删除栈中全部元素并进行输出
System.out.println(stack.pop());
}
}
}
运行结果: