在 Java 中,Hashtable 是 java.util 包下的一个线程安全的哈希表实现,用法和 HashMap 非常相似,但有一些重要区别。
import java.util.Hashtable;
Hashtable<String, Integer> table = new Hashtable<>();
table.put("apple", 10);
table.put("banana", 20);
int value = table.get("apple"); // 10
boolean hasKey = table.containsKey("apple");
boolean hasValue = table.containsValue(20);
table.remove("apple");
方式一:keySet
for (String key : table.keySet()) {
System.out.println(key + " = " + table.get(key));
}
方式二:entrySet(推荐)
for (var entry : table.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
方式三:Enumeration(老式写法)
Enumeration<String> keys = table.keys();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
System.out.println(key);
}
✅ 线程安全(方法都加了 synchronized)
✅ 不允许 null 键和 null 值
✅ 无序(不保证顺序)
✅ 继承自 Dictionary(旧 API)
table.put(null, 1); // 抛 NullPointerException
table.put("a", null); // 抛 NullPointerException
| 对比项 | Hashtable | HashMap |
|---|---|---|
| 线程安全 | ✅ 是 | ❌ 否 |
| 允许 null | ❌ 不允许 | ✅ 允许 |
| 性能 | 较慢 | 较快 |
| 推荐使用 | 不推荐(旧) | ✅ 推荐 |
如果你需要:
ConcurrentHashMapHashMapMap<String, Integer> map = new ConcurrentHashMap<>();
import java.util.Hashtable;
import java.util.Map;
public class Demo {
public static void main(String[] args) {
Hashtable<String, Integer> table = new Hashtable<>();
table.put("A", 1);
table.put("B", 2);
for (Map.Entry<String, Integer> e : table.entrySet()) {
System.out.println(e.getKey() + " -> " + e.getValue());
}
}
}
如果你愿意,我也可以帮你对比 Hashtable / HashMap / ConcurrentHashMap 的底层原理,或者讲 哈希冲突、扩容机制。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。