Java中HashMap和Hashtable之间的区别是什么?
对于非线程应用程序,哪个更有效?
Java中HashMap和Hashtable之间的区别是什么?
对于非线程应用程序,哪个更有效?
当前回答
HashMap:它是java.util包中可用的类,用于以键和值格式存储元素。
Hashtable:它是一个在集合框架中被识别的遗留类。
其他回答
Hashtable与HashMap类似,具有类似的接口。建议您使用HashMap,除非您需要支持遗留应用程序或需要同步,因为Hashtable方法是同步的。因此,在您不是多线程的情况下,HashMaps是您的最佳选择。
看看这个图表。它提供了不同数据结构之间的比较以及HashMap和Hashtable。比较准确、清晰且易于理解。
Java集合矩阵
已经发布了许多好答案。我补充了一些新的观点并总结了一下。
HashMap和Hashtable都用于以键和值的形式存储数据。它们都使用哈希技术来存储唯一的键。但是HashMap和Hashtable类之间有很多不同,如下所示。
哈希图
HashMap未同步。它不是线程安全的,如果没有适当的同步代码,就无法在多个线程之间共享。HashMap允许一个空键和多个空值。HashMap是JDK1.2中引入的一个新类。HashMap速度很快。我们可以通过调用以下代码使HashMap同步Map m=Collections.synchronizedMap(HashMap);Iterator遍历HashMap。HashMap中的迭代器快速失败。HashMap继承AbstractMap类。
哈希表
哈希表已同步。它是线程安全的,可以与多个线程共享。哈希表不允许空键或值。Hashtable是一个遗留类。哈希表很慢。哈希表是内部同步的,不能不同步。枚举器和迭代器遍历哈希表。Hashtable中的枚举器不会快速失败。Hashtable继承Dictionary类。
进一步阅读Java中HashMap和Hashtable之间的区别是什么?
HashMap是模拟的,因此可以在GWT客户端代码中使用,而Hashtable不是。
由于Java中的Hashtable是Dictionary类的一个子类,现在由于Map接口的存在而过时,所以不再使用它。此外,对于一个实现Map接口的类,没有什么是不能用Hashtable做的。