我知道map是一种将键映射到值的数据结构。字典不也是这样吗?地图和字典__abc0的区别是什么?
Hashtable
HashMap
一个是另一个的旧说法。通常,“字典”一词是在数学术语“地图”占主导地位之前使用的。此外,字典倾向于有键类型的字符串,但这并不是100%正确的。
这个概念的其他术语相当常见:关联数组和哈希。
有一个基于树的字典叫做单词查找树。
在Lisp中,它可能是这样的:
(a (n (d t)) n d )
这句话概括为:
从顶部到叶的遍历产生一个单词。
同一事物的两个术语:
“Map"是正确的数学术语,但避免使用它,因为它在函数式编程中有单独的含义。
有些语言还使用其他术语(“Object"在Javascript中,"Hash"在Ruby中,“table”;在Lua中),但这些术语在编程中也有不同的含义,所以我会避免使用它们。
更多信息请参见在这里。
是的,它们是一样的,你可以添加“关联数组”到混合。
使用Hashtable或Hash ofter表示实现。
Hash
我的2分钱。
Dictionary是Java中的抽象类,而Map是接口。由于Java不支持多重继承,如果一个类扩展了Dictionary,它就不能扩展任何其他类。
因此,引入了Map接口。
字典类已过时,首选使用Map。
所以在纯理论层面上。
字典是一个可以用来定位链接值的值。 Map是一个值,它提供了关于如何定位其他值
所有允许非线性访问的集合(即只有get first或get last)都是Map,因为即使是简单的Array也有一个映射到正确值的索引。因此,虽然字典是地图的一种类型,但地图具有更广泛的功能。
在实践中,它通常是定义名称的映射函数,因此HashMap是一种使用哈希算法将键链接到值的映射数据结构,而Dictionary没有指定键如何链接到值,因此可以通过链表、树或任何其他算法存储。从使用端,你通常不关心算法是什么,只关心它们工作,所以你使用一个泛型字典,只在需要执行算法类型时才转移到其他结构之一
其实不是一回事。映射是字典的一个子集。Dictionary被定义为在这里具有插入、删除和查找函数。Java使用的Map(根据这)是一个字典,要求键映射到值严格映射为一对一的函数。一个字典可能有多个键映射到一个值,或者一个键映射到几个值(如hashtable中的链接),例如Twitter标签搜索。
作为一个更“真实”的例子,在字典中查找一个单词可以为我们提供同一个单词的许多定义,当我们找到一个指向另一个条目(参见other word)的条目时,为相同的定义列表提供多个单词。在现实世界中,地图更广泛,让我们为坐标位置的名称或名称,但是我们也可以找到一个最近邻(人口等)或其他属性,所以IMHO可能有理由更大的扩张映射类型可能有基于图的实现,但最好是总是假设键-值对,尤其是最近的邻居和其他属性的值都可以是数据成员的值。
尽管有一对一的要求,但如果值被泛化为集合本身,或者值仅仅是对存储在其他地方的集合的引用,则Java映射可以实现更类似于广义字典的东西。
请记住,Java维护者不是ADT定义的维护者,Java决策是专门针对Java的。
主要的区别是地图要求所有的条目(value &密钥对)具有唯一的密钥。如果发生冲突,即当一个新条目与集合中已经存在的条目具有相同的键时,则需要冲突处理。
通常,我们使用单独的链接来处理冲突。或线性探测。
字典允许将多个条目链接到同一个键。
当Map实现了独立链接时,它就趋向于字典。
计算机科学<强> < / >强术语总结:
a <强> < /地图强大>是一个联想数据结构,能够存储一组键,每个都与一个(或多个-例如c++ multimap) 价值相关联,具有访问和擦除现有项的能力,只给出键。
回答这个问题很复杂,因为程序员在他们使用的特定语言或系统中看到了术语被赋予了更具体的含义,但这个问题要求“理论上”进行语言不可知的比较,我认为这意味着in Computing Science terms。
牛津大学计算机科学词典列出:
< >强字典< / >强表示一组元素的任何数据结构,可以支持元素的插入和删除以及成员测试
地图的计算科学概念是基于数学语言学术语映射,牛津词典将其定义为:
<强> < / >强映射将给定集合(域)中的每个元素与第二个集合(范围)中的一个或多个元素相关联的操作。
因此,使用上面严格的Comp Sci术语,当时,字典只是一个映射接口恰好支持不是每个字典都需要的附加操作:
存储具有不同关键和价值组件的元素的能力
能力检索和擦除的值只给定键
一个小插曲:
机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场机场这个问题的其他答案(以及他们的赞)表明在大多数程序员的经验中< >强“dictionary"将等同于"map"是多么有可能。试着选择更广泛和更容易理解的术语。
map
multimap
unordered_map
unordered_multimap
set
multiset
unordered_set
unordered_multiset
std::find
array
vector
list
...以后可以添加其他语言/可以随意编辑…
我现在在一个数据结构类中,我的理解是dict()数据类型也可以初始化为dictionary ={}或键和值,基本上与列表/数组数据类型用于实现堆栈和队列相同。因此,dict()是类型,映射是一个结果数据结构,您可以选择用字典数据类型实现,就像您可以使用列表类型并选择用它实现堆栈或队列数据结构一样。