class Stack<T> {
private items: T[] = [];
push(item: T) {
this.items.push(item);
}
pop(): T | undefined {
return this.items.pop();
}
peek(): T | undefined {
return this.items[this.items.length - 1];
}
}
泛型栈类相较于普通栈类的优势
- 代码复用性:泛型栈类可以处理不同类型的数据,而不需要为每种数据类型都编写一个单独的栈类。例如,既可以创建一个存储数字的栈
new Stack<number>()
,也可以创建一个存储字符串的栈 new Stack<string>()
,大大减少了重复代码。
- 类型安全:在编译时,TypeScript 会根据泛型类型参数进行类型检查。如果尝试将不匹配类型的数据入栈,编译器会报错,避免了运行时类型错误。例如,
let stack = new Stack<number>(); stack.push('string');
会在编译时报错。
适用场景
- 通用数据结构库:在开发通用的数据结构库时,泛型栈类非常有用。因为库需要支持多种数据类型,泛型能提供统一的实现,满足不同用户对于不同数据类型栈的需求。
- 算法实现:在实现一些算法时,可能需要使用栈结构处理不同类型的数据。使用泛型栈类可以让算法代码更通用,例如深度优先搜索(DFS)算法中使用栈来存储节点,节点类型可能多样,泛型栈就能很好地适应这种情况。