地图和字典有什么区别?

MapDictionary什么区别? 我不是要求他们是如何在X或Y语言中定义的(这似乎是人们一般在这里问到的),我想知道它们在理论上有什么不同。

我知道一个Map是一个将键映射到值的对象。 不是一个Dictionary是一样的吗? 他们有什么区别?

两个术语是相同的东西

Java,C ++使用“Map”
“Dictionary”被.Net,Python使用
Javascript,PHP使用“关联数组”

“映射”是一个正确的math术语,但是它被避免了,因为它在函数式编程中有着不同的含义。

看到这里 。

一个是另一个的老一届。 通常术语词典是在math术语“地图”被采纳之前使用的。 而且,字典往往有一个关键stringtypes,但这并不是100%真实的。

通常,我假设一张地图是由一个哈希表支持的; 它意味着一个无序的商店。 字典意味着一个有序的商店。

有一个名为Trie的树型字典。

在Lisp中,它可能看起来像这样:

 (a (n (dt)) nd ) 

其中封装的话:

  • 一个
  • ant
  • 一个
  • 广告

从顶部到叶子的遍历产生一个词。

我的2美分。

Dictionary是Java中的一个抽象类,而Map是一个接口。 因为Java不支持多重inheritance,所以如果一个类扩展了Dictionary,它就不能扩展任何其他的类。

因此引入了Map接口。

Dictionary类是过时的,使用Map是首选。

是的,他们是一样的,你可以添加“关联arrays”的组合。

使用HashtableHash ofter是指执行。

如此纯粹的理论层面。

字典是一个可以用来定位链接值的值。 地图是提供如何定位其他值的说明的值

所有允许非线性访问的集合(即只得到第一个或最后一个)都是一个Map,因为即使是一个简单的Array也有一个映射到正确值的索引。 所以,虽然字典是一种types的地图,地图是一个更广泛的可能的function。

在实践中,它通常是定义名称的映射函数,所以HashMap是一种映射数据结构,它使用散列algorithm将键链接到该值,其中Dictionary不指定键与链接的值所以可以通过链表,树或任何其他algorithm来存储。 从使用结束你通常不关心什么algorithm只是他们的工作,所以你使用通用字典,只有当你需要在types的algorithm之前转移到其他结构之一

不是真的一样的事情。 地图是字典的一个子集。 字典在这里定义为具有插入,删除和查找function。 Java所使用的映射(根据这个 )是一个字典,要求映射到值的键被严格映射为一对一的函数。 一个字典可能有多个关键映射到一个值,或者一个关键映射到几个值(如链接在一个hasthtable),例如Twitter标签search。

作为一个更“现实世界”的例子,在字典中查找单词可以给我们多个关于同一个单词的定义,并且当我们find一个指向另一个条目的条目时(参见另一个单词),一些单词对于相同的定义列表。 在现实世界中,地图更广泛,使我们有名称或名称坐标位置,但也可以find最近的邻居或其他属性(人口等),所以恕我直言,可以有一个更大的扩张地图types可能有基于graphics的实现,但最好总是假设只有键 – 值对,特别是因为最近的邻居和其他属性的值可能都只是该值的数据成员。

Java地图,尽pipe一对一的要求,可以实现更像广义字典的东西,如果价值被普遍化为一个集合本身,或者如果这些值只是参考存储在其他地方的集合。

请记住,Java维护者不是ADT定义的维护者,而Java决策是专门针对Java的。

这个概念的其他术语是相当普遍的:关联数组和散列。

主要区别在于Map需要所有条目(值和密钥对)具有唯一的密钥。 如果碰撞发生,即当一个新的条目与已经在集合中的条目具有相同的键时,则需要冲突处理。

通常,我们使用分离链处理冲突。 或线性探测

字典允许将多个条目链接到相同的密钥。

当一个Map实现了单独的链接时,它往往类似于一个Dictionary。

对于相同的概念,这是两个不同的术语。
HashtableHashMap也指的是相同的概念。