Java 经典数据结构:Vector、Stack、Hashtable 等遗留类详解
Java 早期(Java 1.x)在 java.util 提供了一组数据结构类,虽被 Collections Framework 取代,但仍广泛存在于遗留代码中,理解它们有助于维护迁移。
核心遗留类概览
| 类/接口 | 特点 | 现代替代 |
|---|---|---|
Enumeration | 遍历接口,hasMoreElements()/nextElement() | Iterator |
BitSet | 位集合,紧凑存储布尔标志位 | 仍在用,无直接替代 |
Vector | 动态数组,**线程安全**(同步方法) | ArrayList + 手动同步或 CopyOnWriteArrayList |
Stack | 继承 Vector,LIFO 栈,push/pop/peek | ArrayDeque(推荐)、LinkedList |
Dictionary | 键值映射抽象类 | Map 接口 |
Hashtable | Dictionary 实现,**线程安全**,键值不可为 null | HashMap + 同步或 ConcurrentHashMap |
Properties | 继承 Hashtable,键值均为 String,配置文件首选 | 仍在用(配置加载) |
Vector:同步动态数组
Vector v = new Vector<>();
v.add("A"); v.add("B"); v.add(1, "插入");
System.out.println(v.get(0)); // A
// 扩容策略:默认 2 倍,可指定 capacityIncrement
⚠️ 同步开销大,单线程首选 ArrayList。
Stack:后进先出
Stack stack = new Stack<>();
stack.push(1); stack.push(2);
System.out.println(stack.pop()); // 2
System.out.println(stack.peek()); // 1(不移除)
System.out.println(stack.search(1)); // 从栈顶向下 1-based 索引
官方建议:用 Deque 实现(ArrayDeque)替代 Stack。
Hashtable:同步哈希表
Hashtable ht = new Hashtable<>();
ht.put("one", 1); ht.put("two", 2);
// ht.put(null, 1); // NPE:键值均不可为 null
System.out.println(ht.get("one"));
迭代器为 fail-fast,并发修改抛 ConcurrentModificationException。
Properties:配置文件专用
Properties props = new Properties();
props.setProperty("db.url", "jdbc:mysql://localhost");
props.setProperty("db.user", "root");
// 存储到文件
try (FileOutputStream out = new FileOutputStream("config.properties")) {
props.store(out, "数据库配置");
}
// 从文件加载
try (FileInputStream in = new FileInputStream("config.properties")) {
props.load(in);
System.out.println(props.getProperty("db.url"));
}
支持 .properties 文件,也支持 XML 格式(loadFromXML/storeToXML)。
Enumeration 遍历
Enumeration e = Collections.enumeration(list); // 集合转枚举
while (e.hasMoreElements()) System.out.println(e.nextElement());
迁移建议
- 新代码**全面使用 Collections Framework**(
List/Set/Map接口 + 实现类) - 需线程安全 →
ConcurrentHashMap、CopyOnWriteArrayList、Collections.synchronizedXxx() - 栈/队列 →
ArrayDeque - 位操作 →
BitSet仍可用,或EnumSet/Long.bitCount() - 配置加载 →
Properties仍是标准,或迁移到 YAML/JSON + Jackson/SnakeYAML
java
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 继承:核心概念、类型与实战示例
- 精通 Java 封装:数据隐藏实战指南
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除
- Java 经典数据结构:Vector、Stack、Hashtable 等遗留类详解