我应该何时使用Hashtable与HashMap

Viv*_*ath 24 java collections hashtable hashmap

这不是一个关于之间的差异问题HashtableHashMap.我知道Hashtable对象不能接受null键或值条目的值,它是同步集合,并且它使用的内存略少于a HashMap.

我想知道使用a Hashtable而不是a 更合适的场景HashMap.

Jon*_*eet 27

这不是一个关于之间的差异问题HashtableHashMap

那真是......

我想知道使用a Hashtable而不是a 更合适的场景HashMap.

准确地说,当你想要两者之间的差异时:

  • 当您想在Java 1.1上运行时
  • 当你想每个操作是同步的(你弄个表格线程安全的,只要你永远不叠代) -由于某种原因不想使用Collections.synchronizedMapHashMap
  • 当您不希望能够存储空值时
  • 当记忆差异实际显着时(只有在你证明了这种情况之后) - 我甚至都不知道这种差异,个人......
  • 当你被迫使用一个令人讨厌的API返回或采取时Hashtable(相对罕见,幸运的是)

我不记得上次我处于那种情况,我个人认为 - Hashtable在现代Java代码中使用它是非常罕见的.

  • @thinksteep:真的吗?我在 1.6 文档中没有看到任何弃用通知:http://docs.oracle.com/javase/6/docs/api/java/util/Hashtable.html (2认同)

Sar*_*rge 14

决不.Hashtable是Java 1中地图的原始实现.它已经被Map实现所取代.当然,Hashtable已被改装以匹配,但这并不是非常有用.

它的主要问题在于它是同步的.这意味着它在线程之间共享的任何情况下都会很慢.在这种情况下,ConcurrentHashMap是更好的选择.如果您在单个线程上运行,那么未同步的HashMap是更好的选择.


ska*_*man 7

我只能想到一个有效的理由 - 当你使用需要它的API时,例如JNDI非常恼人的InitialContext.

除此之外,我完全没有理由使用它Hashtable.你可以得到的同步版本HashMap使用Collections.synchronizedMap.