Dictionary
和Hashtable
之间的区别是什么?如何使用Java中的Dictionary
类?
答案 0 :(得分:21)
Dictionary
是Hashtable
的抽象基类。为了向后兼容旧代码,两者仍然在JDK中。我们应该使用{1.2}中引入的HashMap
和Map
接口的其他实现。
答案 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。
总结:请勿使用Dictionary
或Hashtable
,除非出于兼容性原因,否则请使用HashMap
否则ConcurrentHashMap
需要线程安全,如果您的地图在并发环境中使用,则需要{{1}}。
答案 3 :(得分:3)
Hashtable
是Dictionary
的实现。您不能直接使用Dictionary
,因为它是一个抽象类。
但你不应该使用它们,因为它们已被Map
接口和实现类取代,其中HashMap
是最受欢迎的。
答案 4 :(得分:2)
我找到了关于OOP原则的讲座,其中包含您寻求的答案:
编辑:
<强>词典强> 计算的一个主题是存储/检索/删除的主题:将数据存储在某处,以便以后可以在不再需要时检索和丢弃,所有这些都以最有效的方式进行。这些计算活动的抽象体现在所谓的字典概念中,用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。