一.介绍
Java 集合框架提供了一组强大的类和接口来处理和操作对象集合。其中,Vector 和 Stack 类提供了以顺序方式存储和管理元素的基本功能。这两个类都是传统集合的一部分,但由于它们的同步性质和特定用例,它们仍然具有相关性。Vector 类实现了一个动态数组,可以根据需要增大或缩小以适应元素的添加和删除。它支持在指定位置添加、访问和删除元素等操作,使其适用于线程安全和有序遍历至关重要的场景。另一方面,Stack 类扩展了 Vector 以表示后进先出 (LIFO) 对象堆栈。它包括 push 和 pop 等其他方法以促进堆栈操作,使其成为需要深度优先搜索遍历、撤消机制或表达式评估的应用程序的理想选择。本文探讨了 Java 集合框架中 Vector 和 Stack 类的实现细节、使用场景和比较分析。通过了解它们的功能和细微差别,开发人员可以有效地利用这些类来提高 Java 应用程序的效率和功能。
二.Vector 类
Java 中的 Vector 类扩展了 AbstractList 类并实现了 List、Cloneable 和 Serializable 等关键接口。它充当与 ArrayList 类似的动态数组,但具有内置同步功能。此同步可确保一次只有一个线程可以访问 Vector 对象,从而使其对于并发操作而言是线程安全的。此特性在跨多个线程的数据完整性至关重要的场景中特别有用。通过实现同步访问,Vector 类为管理 Java 应用程序中的有序集合提供了可靠的解决方案。
1.Vector 类的构造函数是,
- **Vector():**此默认构造函数初始化一个 Vector,其初始容量为 10 个元素。
- **Vector(int size):**构造具有指定初始大小的 Vector。
- **Vector(int size, int increasing):**构造具有指定初始大小的 Vector。increment 参数确定 Vector 需要扩展时其容量应增加多少。如果未指定increment,则 Vector 每次扩展时其容量都会加倍。
- **Vector(Collection c):**构造一个包含指定 Collection c 中所有元素的 Vector。
这些构造函数为在 Java 中初始化和填充 Vector 实例提供了灵活性,可以满足不同的需求,例如特定的初始大小或从现有集合中复制元素。
2.Vector 类的方法
- **addElement(Object element):**将指定元素附加到 Vector 的末尾,并将其大小增加一。
- **capacity():**返回 Vector 的当前容量。
- **contains(Object element):**如果 Vector 包含指定元素,则返回 true。
- **containsAll(Collection c):**如果 Vector 包含指定 Collection c 中的所有元素,则返回 true。
- **elementAt(int index):**返回 Vector 中指定索引处的元素。
- **EnsureCapacity(int minimumCapacity):**确保 Vector 至少具有指定的最小容量。如果 Vector 的当前容量小于最小容量,则增加其容量。
- **get(int index):**返回 Vector 中指定索引处的元素。
- **setElementAt(Object element, int index):**将 Vector 中指定索引处的元素设置为给定元素。
- **setSize(int newSize):**将 Vector 的大小设置为指定的 newSize。如果 newSize 大于当前大小,则 Vector 将扩展并附加空元素;如果 newSize 小于当前大小,则索引 newSize 及以上位置的所有组件都将被丢弃。
- **size():**返回 Vector 的当前大小。
- **toString():**返回 Vector 的字符串表示形式,按顺序包含其元素。
这些方法为操作和查询 Java 中的 Vector 对象提供了基本功能,促进了高效的数据管理和检索操作。
3.源代码
import java.util.Iterator;
import java.util.Vector;
public class VectorExample {public static void main(String[] args) {Vector<String> fruits = new Vector<>();fruits.add("Apple");fruits.add("Orange");fruits.add("Grapes");fruits.add("Pine");Iterator<String> it = fruits.iterator();while (it.hasNext()) {System.out.println(it.next());}}
}
4.输出
此代码演示了 Java 中 Vector 类和 Iterator 接口的基本用法。它初始化 Vector、向其中添加元素、检索 Iterator 以遍历 Vector,并使用 Iterator 按顺序打印每个元素。此方法展示了如何在 Java 中有效地管理和遍历集合。
三.Stack 类
Java 中的 Stack 类扩展了 Vector 类,继承了其用于管理动态数组的方法。此外,Stack 类还引入了 push、pop、peek 和 search 等专用方法。这些方法支持特定于堆栈的操作:push 将元素添加到堆栈顶部,pop 移除并返回顶部元素,peek 返回顶部元素而不移除它,search 确定堆栈内指定对象的位置。
1.Stack 类的构造函数可以表示为,
Stack()
上述构造函数用于创建一个空堆栈。Stack 类使用先进后出 (FILO) 机制。
2.Stack 类的方法
- **empty():**如果 Stack 为空,则返回 true。
- **peek():**返回 Stack 顶部的元素而不将其删除。
- **pop():**移除并返回 Stack 顶部的元素。
- **push():**将一个项目添加到 Stack 的顶部。
这些方法是操作 Java 中 Stack 数据结构的基础,可以方便地执行诸如检查堆栈是否为空、在不改变堆栈的情况下访问顶部元素、删除顶部元素以及向堆栈顶部添加新元素等操作。
考虑一个将字符串值添加到堆栈的程序。
3.源代码
import java.util.*;
public class StackExample {public static void main(String[] args) {Stack<String> st = new Stack<>();st.push("Java");st.push("Programming");st.push("Language");st.push("Ashish Bhatnagar");System.out.println("The element in the Stack: " + st);System.out.println("The element at the top: " + st.peek());System.out.println("The element popped out of the Stack: " + st.pop());System.out.println("The element in the Stack after popping an element: " + st);System.out.println("The Result of Searching: " + st.search("a b"));}
}
4.输出
此代码演示了 Java 中 Stack 类的基本操作。它初始化 Stack、将元素推送到 Stack、打印 Stack 的内容、执行“peek-and-pop”操作以从 Stack 顶部检索和移除元素,最后演示了在 Stack 中搜索元素。此示例说明了如何在 Java 编程中使用 Stack 数据结构进行 LIFO(后进先出)操作。
四.概括
Vector 类和 Stack 类是 Java 集合框架的基本组件,分别为管理有序集合和基于堆栈的数据结构提供了强大的解决方案。Vector 类扩展了 AbstractList 并实现了 List、Cloneable 和 Serializable 接口,提供了动态数组功能,并内置了同步功能以确保线程安全。它支持添加、访问和修改元素等操作,适合需要同步访问和有序遍历的场景。另一方面,Stack 类扩展了 Vector 并引入了特定于堆栈操作的方法,例如推送(添加元素)、弹出(删除和返回元素)、查看(查看顶部元素而不删除)和搜索(查找元素)。这些类是 Java 编程中的基础,用于高效数据管理和实现依赖于顺序存储和后进先出 (LIFO) 行为的算法。