![](/img/trans.png)
[英]What's the difference between the return of hashCode() and a key in a hashTable?
[英]What's the difference between Hashtable and Dictionary?
Dictionary
和Hashtable
之间的区别是什么?我如何使用Java中的Dictionary
类?
Dictionary
是Hashtable
的抽象基类。 为了向后兼容旧代码,两者仍然在JDK中。 我们期望使用HashMap
和Java 1.2中引入的Map
接口的其他实现。
Dictionary
是一个抽象类, Hashtable
超类。 你不应该使用Dictionary
因为它已经过时了 。 至于Hashtable,它比HashMap
等其他地图的优势是线程安全,但是自Java 1.5以来引入了ConcurrentHashMap,没有真正的理由再使用它了 - 请参阅javadoc
从Java 2平台v1.2开始,这个类被改进以实现Map接口,使其成为Java Collections Framework的成员。 与新的集合实现不同,Hashtable是同步的。 如果不需要线程安全实现,建议使用HashMap代替Hashtable。 如果需要线程安全的高度并发实现,那么建议使用ConcurrentHashMap代替Hashtable。
总结 :除非出于兼容性原因,否则不要使用Dictionary
或Hashtable
,如果不需要线程安全,则使用HashMap
如果在并发环境中使用地图,则使用ConcurrentHashMap
。
Hashtable
是Dictionary
一个实现。 您不能直接使用Dictionary
,因为它是一个抽象类。
但是你不应该使用它们,因为它们已被Map
接口和实现类取代,其中HashMap
是最受欢迎的。
我找到了一个关于OOP原理的讲座,其中包含您寻求的答案:
编辑:
字典计算中的一个主要主题是存储/检索/删除的主题:将数据存储在某处,以便以后可以在不再需要时检索和丢弃,所有这些都以最有效的方式完成。 这些计算活动的抽象体现在所谓的字典的概念中,在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.