HashMap 和 Hashtable 是 Java 开发程序员必须要掌握的,也是在各种 Java 面试场合中必须会问到的。
但你对这两者的区别了解有多少呢?
现在,栈长我给大家总结一下,或许有你不明朗的地方,在栈长的指点下都会拨开迷雾见晴天。
1、线程安全
Hashtable 是线程安全的,HashMap 不是线程安全的。
为什么说 HashTable 是线程安全的?
来看下 Hashtable 的源码,Hashtable 所有的元素操作都是 synchronized 修饰的,而 HashMap 并没有。
public synchronized V put(K key, V value);
public synchronized V get(Object key);
...
2、性能优劣
既然 Hashtable 是线程安全的,每个方法都要阻塞其他线程,所以 Hashtable 性能较差,HashMap 性能较好,使用更广。
如果要线程安全又要保证性能,建议使用 JUC 包下的 ConcurrentHashMap。
3、NULL
Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null。
那么问题来了,为什么 Hashtable 是不允许 KEY 和 VALUE 为 null, 而 HashMap 则可以?
Hashtable put 方法逻辑:
public synch