Java中HashMap和Hashtable之间的区别是什么?

对于非线程应用程序,哪个更有效?


当前回答

我的小贡献:

Hashtable和HashMap之间的第一个也是最重要的区别是,HashMap不是线程安全的,而Hashtable是线程安全的集合。Hashtable和HashMap之间的第二个重要区别是性能,因为HashMap不同步,所以性能比Hashtable好。Hashtable与HashMap的第三个区别是Hashtable是过时的类,应该在Java中使用ConcurrentHashMap代替Hashtable。

其他回答

根据这里的信息,我建议使用HashMap。我认为最大的优点是,Java将防止您在迭代时修改它,除非您通过迭代器进行修改。

请记住,HashTable是在引入Java集合框架(JCF)之前的遗留类,后来经过了修改以实现Map接口。Vector和Stack也是如此。

因此,在新代码中始终远离它们,因为正如其他人所指出的,JCF中总是有更好的替代方案。

这是Java集合备忘单,您会发现它很有用。请注意,灰色块包含旧类HashTable、Vector和Stack。

除了izb所说的,HashMap允许空值,而Hashtable不允许。

还要注意,Hashtable扩展了Dictionary类,作为Javadocs状态,该类已过时,已被Map接口取代。

由于Java中的Hashtable是Dictionary类的一个子类,现在由于Map接口的存在而过时,所以不再使用它。此外,对于一个实现Map接口的类,没有什么是不能用Hashtable做的。

对于线程应用程序,您通常可以使用ConcurrentHashMap,这取决于您的性能要求。