我什么时候应该使用哈希表而不是哈希映射

2022-09-01 13:54:23

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

我想知道使用 a 而不是 .HashtableHashMap


答案 1

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

嗯,这真的是...

我想知道使用 a 而不是 .HashtableHashMap

当您想要两者之间的差异时:

  • 当您想在 Java 1.1 上运行时
  • 当您希望每个操作都同步时(只要您从不迭代它,就可以获得某种形式的线程安全) - 并且由于某种原因不想在Collections.synchronizedMapHashMap
  • 当您不希望能够存储空值时
  • 当记忆差异实际上很重要时(只有在你证明情况确实如此之后) - 我个人甚至没有意识到这种差异......
  • 当你被一个讨厌的API强迫返回或采取(相对罕见,幸运的是)Hashtable

我不记得我上一次遇到这种情况是什么时候了,就我个人而言,我会说在现代Java代码中适合使用是非常罕见的。Hashtable


答案 2

从不。

Hashtable是Java 1中映射的原始实现。它已被Java Collections Framework中定义的Map<K,V>实现所取代。当然,已经进行了改造以实施,但这并不是非常有用。HashtableMap

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