对于一般情况,当任何一个工作时,哪个更好用,哈希映射或哈希表?

fro*_*die 3 java hashtable hashmap

我偶尔会用几种语言使用哈希表,但我在浏览一些代码时遇到了Java地图.我检查了这个SO问题的差异,这个问题非常清楚地表达了.我的问题是:

  • 当任何一个可以为你工作,哪个更好用?如果你处理空值/线程,你应该选择哪一个?

  • 哪一个更经常使用/更标准?

akf*_*akf 7

  • 如果其中任何一个适合你,我会使用a,HashMap因为在Hashtable提供的同步中会有开销
  • 我认为这HashMap是更标准的,并且更经常使用.同步Hashtable在一定程度上已被集合和并发框架的进步所取代.


Ale*_*ing 5

Hashtable比较旧.它已经在JDK 1.0中发布了.在1.2中,当引入集合框架时,Hashtable被确定为一个问题,因为它是在所有公共方法同步的情况下实现的.这是一种预防措施,仅在多线程环境中是必需的,否则会损害性能(有些人已表示可以优化,但YMMV).

遗憾的是,不可能只删除同步,因为某些代码已经依赖于以这种方式实现的Hashtable.因此,HashMap诞生了.当他们参与其中时,他们投入了'permit nulls'功能并将其改编为通用集合框架.

StringBuffer也发生了同样的事情,新的非同步版本称为StringBuilder.

简而言之:使用HashMap:它是最新,最经过深思熟虑的实现.Hashtable是遗产.如果需要同步实现,可以使用Hashtable或Collections.synchronizedMap(Map).