不同点有以下几个:
第一:HashMap不是同步的,Hashtable是同步的。
第二:HashMap允许使用null值和null键,Hashtable不允许。
第三:HashMap把Hashtable的contains()方法去掉。
第四:HashMap是Java1.2引进的Map接口的一个实现,HashTable继承自Dictionary类,也实现了Map接口。
同步与非同步:
如果多个线程同时访问Hashtable,HashTable不需要自己为它的方法实现同步。
如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须 保持外部同步。(结 构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修 改.)这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.sy nchronizedMap方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的非同步访问,如下所 示:
Map m = Collections.synchronizedMap(new HashMap(...));