Hashtable和Dictionary之间有什么区别?

时间:2012-03-19 12:02:27

标签: java dictionary collections hashtable

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

7 个答案:

答案 0 :(得分:21)

DictionaryHashtable的抽象基类。为了向后兼容旧代码,两者仍然在JDK中。我们应该使用{1.2}中引入的HashMapMap接口的其他实现。

答案 1 :(得分:15)

Dictionary的javadoc有你的答案。

  

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

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

同样请注意以下文档:

  

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

答案 2 :(得分:9)

Dictionary是一个抽象类,Hashtable的超类。 您不应该使用Dictionary,因为它是obsolete。 至于Hashtable,它比HashMap等其他地图的优势是线程安全,但自Java 1.5以来引入ConcurrentHashMap,没有真正的理由再使用它 - 请参阅javadoc < / p>

  

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

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

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

我找到了关于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 - &gt; {0,1,...,m - 1}

答案 5 :(得分:2)

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

答案 6 :(得分:1)

根据词典的javadocs:

  

注意:此类已过时。新的实现应该实现   映射界面,而不是扩展此类。

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