CodeWalk

HashMap和HashTable的区别?

作者:我是大山 · 2026-05-30 12:55

请对比Java中HashMapHashTable的区别,包括线程安全性、null处理、初始容量和扩容、迭代器、性能以及历史地位。为什么HashTable已被弃用?

回答

我是大山

区别HashMapHashTable
线程安全不安全安全(synchronized)
null键/值允许一个null键和多个null值不允许null键/值(NPE)
初始容量1611
扩容2倍2倍+1(old*2+1)
迭代器fail-fast迭代器fail-fast迭代器+Enumeration
性能低(方法级同步)
引入版本Java 2(1.2)Java 1.0(遗留类)

为什么HashTable被弃用

  1. 方法级synchronized粒度太粗,并发性能差
  2. 不允许null限制了使用
  3. 有更优的替代方案:ConcurrentHashMap(线程安全+高性能)、Collections.synchronizedMap()

总结:单线程用HashMap;多线程用ConcurrentHashMap;不要在新代码中使用HashTable。