Hashtable和Dictionary之间有什么区别?

DictionaryHashtable之间有什么区别,我如何使用Java中的Dictionary类?

DictionaryHashtable的抽象基类。 两者仍然在JDK中以向后兼容旧代码。 我们期望使用HashMap和Java 1.2中引入的Map接口的其他实现。

字典的javadoc有你的答案。

Dictionary类是任何类的抽象父类,例如Hashtable,它将键映射到值。

您不直接使用Dictionary ,因为它是一个abstract类。

另请注意以下相同的文档:

注意:此类已过时。 新实现应该实现Map接口,而不是扩展此类。

Dictionary是一个抽象类, Hashtable超类。 你不应该使用Dictionary因为它已经过时了 。 至于Hashtable,它比其他地图(如HashMap )的优势是线程安全,但是自Java 1.5以来引入ConcurrentHashMap,没有真正的理由再使用它了 – 请参阅javadoc

从Java 2平台v1.2开始,这个类被改进以实现Map接口,使其成为Java Collections Framework的成员。 与新的集合实现不同,Hashtable是同步的。 如果不需要线程安全实现,建议使用HashMap代替Hashtable。 如果需要线程安全的高度并发实现,那么建议使用ConcurrentHashMap代替Hashtable。

总结 :除非出于兼容性原因,否则不要使用DictionaryHashtable ,如果不需要线程安全,则使用HashMap如果在并发环境中使用地图,则使用ConcurrentHashMap

HashtableDictionary一个实现。 您不能直接使用Dictionary ,因为它是一个抽象类。

但是你不应该使用它们,因为它们已被Map接口和实现类取代,其中HashMap是最受欢迎的。

我找到了一个关于OOP原理的讲座,其中包含了您寻求的答案:

http://www.clear.rice.edu/comp202/04-fall/lectures/lec23/

编辑:

字典计算中的一个主要主题是存储/检索/删除的主题:将数据存储在某处,以便以后可以在不再需要时检索和丢弃,所有这些都以最有效的方式进行。 这些计算活动的抽象体现在所谓的字典的概念中,用Java表示如下所示的接口。

散列表散列表是普通数组的泛化。 当实际存储的密钥数量相对于可能密钥的总数较小时,哈希表成为直接寻址数组的有效替代方法,因为哈希表通常使用与实际存储的密钥数量成比例的大小的数组。 不是直接使用键作为数组索引,而是根据键计算数组索引。 利用散列,具有密钥k的元素存储在时隙h(k)中; 即,使用散列函数h来计算来自密钥k的时隙。 h将密钥集U映射到哈希表T [0..m-1]的槽中:h:U – > {0,1,…,m – 1}

Dictionary类是任何类的抽象父类,例如Hashtable,它将键映射到值。 每个键和每个值都是一个对象。 在任何一个Dictionary对象中,每个键最多与一个值相关联。 给定一个Dictionary和一个键,可以查找相关的元素。 任何非null对象都可以用作键和值。

根据字典的javadocs:

注意:此类已过时。 新实现应该实现Map接口,而不是扩展此类。

Hashtable也是JDK 1.0 vintage。 您应该更喜欢Map接口及其更现代的实现:HashMap和TreeMap。