第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类,HashMap是Java 1.2引进的Map接口的一个实现。public class Hashtable<K,V> extends Dictionary<K,V>
public class HashMap<K,V> extends AbstractMap<K,V>
第二个不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,你可以直接在一个多线程的应用程序中用一个Hashtable而不必担心它的同步问题,如果使用HashMap,那么你必须额外地提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法创建一个线程安全的Map对象Map hashMap = Collections.synchronizedMap(new HashMap<String, String>());
Hashtable hashtable = new Hashtable<String, String>();
并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。
第三个不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。 hashMap.put(null, null);
hashtable.put(null, null); Error:java.lang.NullPointerException