在 Java 中,Hashtable 是 Java 早期提供的一个基于哈希表的键值对(Key-Value)集合类,位于 java.util 包中。
下面从几个关键方面说明它是什么、怎么用、以及和现在常用类的区别。
java.util.Hashtable<K, V>
示例:
Hashtable<String, Integer> table = new Hashtable<>();
table.put("a", 1);
table.put("b", 2);
System.out.println(table.get("a")); // 1
Hashtable 的方法(如 put、get)都用 synchronized 修饰table.put(null, 1); // 编译通过,运行抛 NullPointerException
table.put("a", null); // 同样抛异常
| 方法 | 说明 |
|---|---|
put(k, v) |
添加键值对 |
get(k) |
根据 key 获取 value |
remove(k) |
删除指定 key |
containsKey(k) |
是否包含 key |
containsValue(v) |
是否包含 value |
size() |
元素个数 |
keys() |
返回 key 的枚举 |
| 对比点 | Hashtable | HashMap |
|---|---|---|
| 线程安全 | ✅ 是 | ❌ 否 |
| null key/value | ❌ 不允许 | ✅ 允许 |
| 性能 | 较低 | 较高 |
| 出现版本 | JDK 1.0 | JDK 1.2 |
| 推荐使用 | ❌ 不推荐 | ✅ 推荐 |
HashMapConcurrentHashMap(推荐)Collections.synchronizedMap()Map<String, Integer> map = new ConcurrentHashMap<>();
Hashtable 是 Java 早期的线程安全哈希表实现,现在已经不推荐使用了,推荐用 HashMap 或 ConcurrentHashMap 替代。
如果你愿意,我也可以帮你画一张 HashMap / Hashtable / ConcurrentHashMap 对比图,或者讲讲 底层原理(哈希冲突、扩容等)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。