Java 数据结构(传统集合)
JDK 1.0 时代的集合只有 Enumeration、Vector、Stack、Dictionary/Hashtable、Properties。它们功能正确但设计老旧(方法冗长、Hashtable 全方法加锁),JDK 1.2 起被 List/Set/Map 集合框架取代。本节帮你在读老代码时认识它们,并掌握至今仍活跃的 Properties。
Enumeration 枚举接口
Enumeration 是旧版"迭代器",用 hasMoreElements()/nextElement() 遍历,功能弱于 Iterator(不能删除元素),已被取代:
// 片段需放进 main 方法中运行
Vector<String> v = new Vector<>();
v.add("A"); v.add("B"); v.add("C");
Enumeration<String> e = v.elements(); // 取得枚举对象
while (e.hasMoreElements()) {
System.out.println(e.nextElement()); // 输出:A、B、C(各占一行)
}
Vector 动态数组
Vector 用法与 ArrayList 几乎一样,但几乎所有方法都加了 synchronized,线程安全的同时性能较差,官方建议用 ArrayList 或 CopyOnWriteArrayList 替代:
// 片段需放进 main 方法中运行
Vector<String> v = new Vector<>(10); // 可指定初始容量
v.add("java");
System.out.println(v.size()); // 输出:1
System.out.println(v.elementAt(0)); // 老式取元素方法,输出:java
Stack 栈
Stack 继承 Vector,提供后进先出(LIFO)的压栈、弹栈操作:
// 片段需放进 main 方法中运行
Stack<Integer> s = new Stack<>();
s.push(1); s.push(2); s.push(3);
System.out.println(s.peek()); // 只看栈顶不弹出,输出:3
System.out.println(s.pop()); // 弹出栈顶,输出:3
System.out.println(s.isEmpty()); // 输出:false
官方建议用 Deque 接口(如 ArrayDeque)替代 Stack 实现栈。
Dictionary 与 Hashtable
Dictionary 是抽象类(已被 Map 取代),Hashtable 是它的实现:key 与 value 都不允许 null,方法全部同步:
// 片段需放进 main 方法中运行
Hashtable<String, Integer> ht = new Hashtable<>();
ht.put("语文", 90);
ht.put("数学", 95);
System.out.println(ht.get("语文")); // 输出:90
System.out.println(ht.containsKey("数学")); // 输出:true
对应新 API 是 HashMap(允许 null、非同步),并发场景用 ConcurrentHashMap。
Properties 读取配置文件
Properties 继承 Hashtable,key/value 都是 String,专门读写 .properties 文件,至今仍被广泛使用:
// 片段需放进 main 方法中运行(config.properties 放程序工作目录)
Properties p = new Properties();
try (FileInputStream in = new FileInputStream("config.properties")) {
p.load(in); // 从文件加载键值对
}
System.out.println(p.getProperty("url")); // 输出:配置文件里的 url 值
System.out.println(p.getProperty("timeout", "3000")); // 键不存在则返回默认值
配置文件每行一个键值对,如 url=jdbc:mysql://localhost:3306/test,行首 # 为注释;p.store(out, "备注") 还能把属性写回文件。
小结:传统集合中 Enumeration、Vector、Stack、Hashtable 已被新集合框架取代(读旧代码认识即可);Properties 凭"配置文件读写"能力沿用至今,load/getProperty/store 三个方法务必掌握。