繁体   English   中英

Hashtable和Dictionary之间有什么区别?

[英]What's the difference between Hashtable and 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM