HashMap因为在Hashtable提供的同步中会有开销HashMap是更标准的,并且更经常使用.同步Hashtable在一定程度上已被集合和并发框架的进步所取代.Hashtable比较旧.它已经在JDK 1.0中发布了.在1.2中,当引入集合框架时,Hashtable被确定为一个问题,因为它是在所有公共方法同步的情况下实现的.这是一种预防措施,仅在多线程环境中是必需的,否则会损害性能(有些人已表示可以优化,但YMMV).
遗憾的是,不可能只删除同步,因为某些代码已经依赖于以这种方式实现的Hashtable.因此,HashMap诞生了.当他们参与其中时,他们投入了'permit nulls'功能并将其改编为通用集合框架.
StringBuffer也发生了同样的事情,新的非同步版本称为StringBuilder.
简而言之:使用HashMap:它是最新,最经过深思熟虑的实现.Hashtable是遗产.如果需要同步实现,可以使用Hashtable或Collections.synchronizedMap(Map).