Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';哈希表和字典的区别是什么?_Java_Dictionary_Collections_Hashtable - Fatal编程技术网

Java 什么';哈希表和字典的区别是什么?

Java 什么';哈希表和字典的区别是什么?,java,dictionary,collections,hashtable,Java,Dictionary,Collections,Hashtable,Dictionary和Hashtable之间有什么区别?我如何使用Java中的Dictionary类?我发现了一个关于OOP原理的讲座,其中包含了您寻求的答案: 编辑: 字典 计算中的一个主要主题是存储/检索/删除:将数据存储在某个地方,以便以后可以在不再需要时检索和丢弃数据,所有这些都是以最有效的方式进行的。这些计算活动的抽象体现在所谓的字典的概念中,用Java表示为接口,如下所示 哈希表 哈希表是普通数组的泛化。 当实际存储的密钥数相对于可能的密钥总数很小时,哈希表就成为一种有效的方法 直

Dictionary
Hashtable
之间有什么区别?我如何使用Java中的
Dictionary
类?

我发现了一个关于OOP原理的讲座,其中包含了您寻求的答案:

编辑:

字典 计算中的一个主要主题是存储/检索/删除:将数据存储在某个地方,以便以后可以在不再需要时检索和丢弃数据,所有这些都是以最有效的方式进行的。这些计算活动的抽象体现在所谓的字典的概念中,用Java表示为接口,如下所示

哈希表 哈希表是普通数组的泛化。 当实际存储的密钥数相对于可能的密钥总数很小时,哈希表就成为一种有效的方法 直接寻址数组的替代方法,因为哈希表 通常使用大小与键数成比例的数组 实际存储的。 不是直接使用键作为数组索引,而是从键计算数组索引。 通过散列,具有密钥k的元素存储在时隙h(k)中;i、 例如,散列函数h用于从密钥k计算时隙。 h将密钥集U映射到哈希表T[0..m-1]的插槽中: h:U->{0,1,…,m-1}


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

的javadoc有你的答案


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

您不能直接使用
字典
,因为它是一个
抽象类

还应注意相同文档中的以下内容:

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


字典
哈希表
的抽象基类。两者都仍然在JDK中,以便向后兼容旧代码。我们希望使用Java 1.2中引入的
HashMap
Map
接口的其他实现

哈希表
字典
的一个实现。不能直接使用
字典
,因为它是一个抽象类


但是您不应该使用它们,因为它们已经被
Map
接口和实现类所取代,而实现类是最流行的。

根据javadocs for Dictionary:

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


Hashtable也是JDK1.0版本。您应该更喜欢Map接口及其更现代的实现:HashMap和TreeMap。

Dictionary
是一个抽象类,是Hashtable的超类。 您不应该按原样使用
词典
。 至于Hashtable,它相对于其他映射(如
HashMap
)的优势在于线程安全,但是自从Java 1.5引入ConcurrentHashMap后,就没有真正的理由再使用它了-参见

从Java2平台v1.2开始,这个类被改装以实现Map接口,使其成为JavaCollections框架的成员。与新的集合实现不同,哈希表是同步的。如果不需要线程安全的实现,建议使用HashMap代替Hashtable。如果需要线程安全的高并发实现,则建议使用ConcurrentHashMap代替Hashtable


总而言之:不要使用
字典
哈希表
,除非出于兼容性原因,否则如果不需要线程安全,请使用
哈希映射
,或者
ConcurrentHashMap
,如果你的映射是在并发环境中使用的。

google中有很多好东西——在stackoverflow上——如果你有选择的话,你应该使用
map
,而不是过时的
字典。哈希表是同步的(线程安全的)HashMap的形式。@kundanbora如果需要线程安全,可以使用ConcurrentHashMap。值得一提的是,Hashtable是线程安全的,而HashMap不是。请看我的答案。哈希表已被改装以实现Map。