HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口。
主要的区别有:线程安全性,同步(synchronization),以及速度。
1、历史原因:
Hashtable继承自Dictionary类。
HashMap是Java1.2引进的Map interface的一个实现。
2、同步性:
Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;
HashMap是非synchronized,如果没有正确的同步的话,多个线程是不能共享HashMap的。
Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。(在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap))
3、值:
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
4、速度:
由于HashMap非线程安全,在只有一个线程访问的情况下,效率要高于HashTable。