亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

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/peekArrayDeque(推荐)、LinkedList
Dictionary键值映射抽象类Map 接口
HashtableDictionary 实现,**线程安全**,键值不可为 nullHashMap + 同步或 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());

迁移建议

  1. 新代码**全面使用 Collections Framework**(List/Set/Map 接口 + 实现类)
  2. 需线程安全 → ConcurrentHashMap、CopyOnWriteArrayList、Collections.synchronizedXxx()
  3. 栈/队列 → ArrayDeque
  4. 位操作 → BitSet 仍可用,或 EnumSet/Long.bitCount()
  5. 配置加载 → Properties 仍是标准,或迁移到 YAML/JSON + Jackson/SnakeYAML

java

  1. 深入理解 Java final 关键字:变量、方法与类的不可变性
  2. Java instanceof 运算符完全指南:用法、继承与接口检查
  3. 精通 Java 继承:核心概念、类型与实战示例
  4. 精通 Java 封装:数据隐藏实战指南
  5. 深入理解 Java 静态嵌套类:用法、差异与实战示例
  6. 精通 Java 匿名内部类:定义、语法与实战示例
  7. Java 单例模式详解:安全实现与使用指南
  8. 精通 Java 反射:运行时检查类、方法与字段
  9. 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
  10. 掌握 Java 泛型:构建可复用、类型安全的代码
  11. 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除
  12. Java 经典数据结构:Vector、Stack、Hashtable 等遗留类详解