Java8 集合之 Stack 详解及实例
什么是 Stack
Stack 是一种基于 LIFO(后进先出)原则的数据结构,它可以通过 push() 向栈顶添加元素,通过 pop() 从栈顶删除元素,并且 peek() 方法可以用来获取栈顶元素但不删除它。
Stack 的实现
在 Java 中,Stack 是由一个 Vector 来实现的。Vector 本来就是线程安全的,而 Stack 继承了 Vector,所以它也是线程安全的。Stack 除了继承 Vector 中的方法外,还添加了若干方法用于实现栈的功能。
Stack 的使用很简单,只需要创建 Stack 对象,然后使用 push() 添加元素,使用 pop() 删除元素,使用 peek() 获取栈顶元素,使用 empty() 判断栈是否为空,使用 search() 查找一个元素在栈中的位置。下面是几个示例:
示例一:Stack 的基本使用
import java.util.Stack;
public class StackDemo {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
stack.push("Java");
stack.push("Python");
stack.push("C++");
System.out.println("Stack: " + stack);
System.out.println("Stack.peek(): " + stack.peek());
System.out.println("Stack.pop(): " + stack.pop());
System.out.println("Stack: " + stack);
}
}
输出结果如下:
Stack: [Java, Python, C++]
Stack.peek(): C++
Stack.pop(): C++
Stack: [Java, Python]
示例二:Stack 实现括号匹配
import java.util.Stack;
public class BracketMatching {
public static void main(String[] args) {
String brackets = "({[()]})";
boolean isCorrect = isValid(brackets);
if (isCorrect) {
System.out.println(brackets + " is correct.");
} else {
System.out.println(brackets + " is incorrect.");
}
}
public static boolean isValid(String brackets) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < brackets.length(); i++) {
char c = brackets.charAt(i);
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (stack.isEmpty()) {
return false;
} else if (c == ')' && stack.peek() != '(') {
return false;
} else if (c == ']' && stack.peek() != '[') {
return false;
} else if (c == '}' && stack.peek() != '{') {
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
}
输出结果如下:
({[()]}) is correct.
结语
Stack 是一种比较基础的数据结构,它的实现和使用都十分简单,但是在实际编程中也有很多的应用场景,如逆波兰表达式求值、汉诺塔问题等等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java8 集合之Stack详解及实例 - Python技术站