这不是关于我了解Hashtable
和HashMap
之间差异的问题。Hashtable
对象无法接受null
值键或值条目,它是同步集合,它使用的内存略少于HashMap
。
我想知道使用Hashtable
代替HashMap
更合适的情况。
答案 0 :(得分:27)
这不是关于
之间差异的问题Hashtable
和HashMap
那真是......
我想知道使用
Hashtable
代替HashMap
更合适的情况。
正是当你想要两者之间的差异时:
Collections.synchronizedMap
HashMap
时(幸运的是相对罕见)我不记得上次我遇到过这种情况,我个人认为 - 在现代Java代码中使用Hashtable
是不合适的。
答案 1 :(得分:14)
从不。 Hashtable是Java 1中地图的原始实现。它已经被Map实现所取代。当然,Hashtable已被改装以匹配,但这并不是非常有用。
它的主要问题在于它是同步的。这意味着它在线程之间共享的任何情况下都会很慢。在这种情况下,ConcurrentHashMap是更好的选择。如果您在单个线程上运行,那么未同步的HashMap是更好的选择。
答案 2 :(得分:7)
我只考虑一个有效的原因 - 当您使用需要它的API时,例如JNDI's hugely irritating InitialContext
class。
除此之外,我认为根本没有理由使用Hashtable
。您可以使用HashMap
获得Collections.synchronizedMap
的同步版本。
答案 3 :(得分:3)
我只在遗留应用程序/库中看到Hashtables。
如果可以的话,如果需要同步Map,请使用ConcurrentHashMap或Collections.synchronizedMap。
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html
答案 4 :(得分:1)
知道何时使用一个类或结构而不是另一个类或结构基本上理解两者之间的差异,并根据这些差异决定哪一个最适合手头的问题。
我知道Hashtable对象不能接受空值
因此,在您需要存储空值的情况下,Hashtable
不合适。
此外,在Hashtable
中,枚举不是故障安全的。因此,如果您需要在枚举时更改结构的内容,Hashtable
会更合适。