Java Stack
Java Stack 类实现了堆栈数据结构。在本教程中,我们将借助示例了解 Java Stack 类及其方法。
在本教程中,我们将借助示例了解 Java Stack 类及其方法。
Java 集合框架中的 Stack
类继承了 Vector
类,它实现了堆栈数据结构的功能。
堆栈实现
在堆栈中,元素以后进先出的方式存储和访问。也就是说,元素被添加到栈顶并从栈顶移除。
创建堆栈
为了创建堆栈,我们必须先导入 java.util.Stack
包,然后使用如下的构造方法创建堆栈对象:
Stack<Type> stacks = new Stack<>();
这里, Type
表示堆栈中的元素的数据类型。例如,
Stack<Integer> stacks = new Stack<>();
Stack<String> stacks = new Stack<>();
堆栈方法
由于 Stack
继承了 Vector
类,它继承了 Vector
类的所有方法。请访问 Java Vector 类章节获取 Vector 类的更多信息。
除了继承的方法之外, Stack
还提供了 5 个特有的方法。
push() 方法
push()
方法向堆栈顶端添加元素。例如,
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
// 向堆栈添加元素
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
}
}
输出
Stack: [Dog, Horse, Cat]
pop() 方法
pop()
方法从堆栈顶端移除元素。例如,
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
// 向堆栈添加元素
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Initial Stack: " + animals);
// 从堆栈删除元素
String element = animals.pop();
System.out.println("Removed Element: " + element);
}
}
输出
Initial Stack: [Dog, Horse, Cat]
Removed Element: Cat
peek() 方法
peek()
方法返回堆栈顶部的对象。例如,
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
// 向堆栈添加元素
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
// 访问堆栈顶部的元素
String element = animals.peek();
System.out.println("Element at top: " + element);
}
}
输出
Stack: [Dog, Horse, Cat]
Element at top: Cat
search() 方法
search()
方法在堆栈中搜索指定的元素,它返回元素相对于堆栈顶部的位置。例如,
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
// 向堆栈添加元素
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
// 搜索一个元素
System.out.println("Position of Cat: " + animals.search("Cat"));
System.out.println("Position of Horse: " + animals.search("Horse"));
System.out.println("Position of Dog: " + animals.search("Dog"));
}
}
输出
Stack: [Dog, Horse, Cat]
Position of Cat: 1
Position of Horse: 2
Position of Dog: 3
empty() 方法
empty()
方法用于检查堆栈是否为空。例如,
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
// 向堆栈添加元素
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
// 检查堆栈是否为空
boolean result = animals.empty();
System.out.println("Is the stack empty? " + result);
}
}
输出
Stack: [Dog, Horse, Cat]
Is the stack empty? false
使用 ArrayDeque 代替 Stack
一般我们不见使用 Stack
类,原因是因为 Stack
类的有的方法是同步导致了性能不高,还有就是 Stack
类内部是数组实现,扩容的时候数组拷贝导致了效率不高。 Deque
接口是一个双端链表,实现了更完善的堆栈数据结构。 Deque
的实现类 ArrayDeque
完全可以替代 Stack
类。
要了解更多信息,请访问: Java ArrayDeque 类。