java:映射和哈希表的区别

java:映射和哈希表的区别,java,dictionary,Java,Dictionary,我不理解这个代码mapd=newhashtable(list.size()):我们创建了一个新对象,但它是映射还是哈希表?它们之间有什么区别?我认为映射只是将两个元素像键一样放在一起的一种方式,它的值(例如{3;Detroit})是一个接口哈希表是该接口的一个实现。还有其他几种,如HashMap,SortedMap,等等。接口定义了编程API;实现定义了API的实现方式。不同的实现可能具有不同的运行时性能特征 关于接口与实现,您可能会发现在这里提供帮助。是一个接口哈希表是该接口的一个实现。还有其

我不理解这个代码
mapd=newhashtable(list.size()):我们创建了一个新对象,但它是映射还是哈希表?它们之间有什么区别?我认为映射只是将两个元素像键一样放在一起的一种方式,它的值(例如{3;Detroit})

是一个接口<代码>哈希表是该接口的一个实现。还有其他几种,如
HashMap
SortedMap
,等等。接口定义了编程API;实现定义了API的实现方式。不同的实现可能具有不同的运行时性能特征

关于接口与实现,您可能会发现在这里提供帮助。

是一个接口<代码>哈希表是该接口的一个实现。还有其他几种,如
HashMap
SortedMap
,等等。接口定义了编程API;实现定义了API的实现方式。不同的实现可能具有不同的运行时性能特征


关于接口与实现,您可能会发现此处的帮助。

Map
是一个接口
Hashtable
是实现
Map
接口的类之一

有关
映射
界面,请参见。特别是说明所有已知实现类的部分

实现映射的任何类都提供一个
key->value
数据结构。作为接口的
Map
定义了所有实现类必须遵守的契约。
映射本身无法实例化


请注意,虽然理想情况下,
Hashtable
应该按照java命名约定命名为
Hashtable
,但这是java中的一个史前类,甚至在标准java命名约定出现之前就存在了。因此,它仍然被称为
Hashtable
,而不是您的问题中错误提到的
Hashtable

Map
是一个接口
Hashtable
是实现
Map
接口的类之一

有关
映射
界面,请参见。特别是说明所有已知实现类的部分

实现映射的任何类都提供一个
key->value
数据结构。作为接口的
Map
定义了所有实现类必须遵守的契约。
映射本身无法实例化

请注意,虽然理想情况下,
Hashtable
应该按照java命名约定命名为
Hashtable
,但这是java中的一个史前类,甚至在标准java命名约定出现之前就存在了。因此,它仍然被称为
Hashtable
,而不是您的问题中错误提到的
Hashtable

它是地图还是哈希表

引用的静态编译时类型是
Map
。正如其他人已经指出的,它是一个接口。您可以调用
映射
界面上的所有方法,并知道它们将遵守合同并按照描述的方式进行操作

对象引用的动态运行时类型是
Hashtable
。它以自己的方式实现
Map
接口中的所有方法

关键思想是引用的编译时类型与它指向的堆上对象的运行时类型是分开的

Hashtable
是一个JDK1.0类,出于兼容性原因,它一直存在。它经过改装以实现
Map
接口,该接口后来引入。您最好根据自己的需求选择另一种实现,例如
HashMap

哈希表的最后一部分包含不应使用它的原因:

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

这意味着它对于单线程模型的效率低于
HashMap
,对于多线程模型的效率低于
ConcurrentHashMap

理解编译时类型和运行时类型的不同对于理解面向对象多态性的工作原理至关重要。对于所有OO语言来说,这是正确的:C++、java、.net、python等。 它是地图还是哈希表

引用的静态编译时类型是
Map
。正如其他人已经指出的,它是一个接口。您可以调用
映射
界面上的所有方法,并知道它们将遵守合同并按照描述的方式进行操作

对象引用的动态运行时类型是
Hashtable
。它以自己的方式实现
Map
接口中的所有方法

关键思想是引用的编译时类型与它指向的堆上对象的运行时类型是分开的

Hashtable
是一个JDK1.0类,出于兼容性原因,它一直存在。它经过改装以实现
Map
接口,该接口后来引入。您最好根据自己的需求选择另一种实现,例如
HashMap

哈希表的最后一部分包含不应使用它的原因:

截至