Dictionary
和Hashtable
有什么区别?在Java中如何使用Dictionary
类?
Dictionary
和Hashtable
有什么区别?在Java中如何使用Dictionary
类?
Dictionary
是Hashtable
的抽象基类。由于向后兼容旧代码,它们仍然存在于JDK中。我们应该使用在Java 1.2中引入的HashMap
和其他实现了Map
接口的实现。
Dictionary 的 javadoc 已经为您提供了答案。
Dictionary 类是任何映射键到值的类(比如 Hashtable)的抽象父类。
您不会直接使用 Dictionary
,因为它是一个 abstract
类。
同时请注意同一文档中的以下内容:
注意:此类已过时。新实现应该实现 Map 接口,而不是扩展该类。
Dictionary
是一个抽象类,也是Hashtable
的超类。
由于已经被弃用,因此不建议使用Dictionary
。
至于Hashtable,它相比其他映射(如HashMap
)的优点在于线程安全性,但自Java 1.5引入了ConcurrentHashMap后,没有真正的理由再使用它-请参阅javadoc
从Java 2平台v1.2开始,此类被改装为实现Map接口,成为Java集合框架的一员。与新的集合实现不同,Hashtable是同步的。如果不需要线程安全的实现,建议使用HashMap代替Hashtable。如果需要线程安全的高并发实现,则建议使用ConcurrentHashMap代替Hashtable。
总之:除非出于兼容性原因真的必须使用Dictionary
或Hashtable
,否则应该使用HashMap
(如果不需要线程安全),或ConcurrentHashMap
(如果映射在并发环境中使用)。
Hashtable
是 Dictionary
的一种实现。你不能直接使用 Dictionary
,因为它是一个抽象类。
但是你也不应该使用它们,因为它们已经被 Map
接口和实现类所取代,其中HashMap
最受欢迎。
我找到了一场关于面向对象编程原则的讲座,其中包含你所寻求的答案:
编辑:
字典 计算机科学中的一个重要主题是存储/检索/删除: 将数据存储在某处,以便稍后检索并在不再需要时丢弃,所有这些都以最有效的方式进行。 这些计算活动的抽象体现在所谓的字典概念中,Java中表示为接口,如下所示。
哈希表 哈希表是普通数组的一种泛化。 当实际存储的键的数量相对于可能的键的总数较小时,哈希表成为直接寻址数组的有效替代方法,因为哈希表通常使用与实际存储的键的数量成比例的大小的数组。 不使用键作为数组索引,而是从键计算数组索引。 使用哈希技术,具有键k的元素存储在插槽h(k)中; 即,哈希函数h用于从键k计算插槽。 h将键集U映射到哈希表T [0..m-1]的插槽中: h:U -> {0, 1,...,m-1}
字典类是任何将键映射到值的类(例如Hashtable)的抽象父类。每个键和每个值都是对象。在任何一个字典对象中,每个键最多关联一个值。给定一个字典和一个键,可以查找关联的元素。任何非空对象都可以用作键和值。
Hashtable也是JDK 1.0的老式实现。你应该优先选择Map接口及其更现代化的实现:HashMap和TreeMap。注意:此类已过时。新实现应该实现Map接口,而不是扩展此类。
Map
而不是过时的Dictionary
。 - assylias