什么是编程中的哈希映射以及它可以在何处使用

时间:2010-04-07 11:38:52

标签: hashtable hashmap hash

我经常听到有人在讨论哈希和哈希映射以及哈希表。我想知道它们是什么,以及哪里可以最好地使用它们。

4 个答案:

答案 0 :(得分:42)

首先,你可以阅读这个article

当您使用列表并且您正在寻找特殊项目时,您通常必须遍历完整列表。当你有大量的名单时,这是非常昂贵的 哈希表可以快得多,在最好的情况下,只需一次访问即可获得您要查找的项目 它是如何工作的?就像一本字典......当你在字典中寻找“哈希表”这个词时,你不会从“a”下的第一个单词开始。而是你直接前往字母'h'。然后去'哈','有'等等,直到找到你的话。您正在字典中使用索引来加快搜索速度 哈希表基本相同。每个项目都有一个唯一的索引(所谓的hash)。您使用此哈希进行查找。散列可以是普通链表中的索引。例如,您的哈希值可能是2130这样的数字,这意味着您应该查看列表中的位置2130。在普通列表中查找已知索引非常容易和快速 整个方法的问题是所谓的hash function,它将这个索引分配给每个项目。当您在寻找项目时,您应该能够提前计算索引。就像在真正的字典中一样,你看到'hashtable'这个单词以字母'h'开头,因此你就知道了大概的位置。
良好的哈希函数提供在所有可能的哈希码空间上均匀分布的哈希码。当然,它试图避免collisions。当两个不同的项获得相同的哈希码时发生冲突 例如,在C#中,每个对象都有一个GetHashcode()方法,为它提供一个哈希值(不一定是唯一的)。这可以用于在字典中查找和排序。

当您开始使用哈希表时,您应该始终牢记,您正确处理冲突。在大型哈希表中很容易发生两个对象获得相同的哈希值(可能你的GetHashcode()的重载有问题,可能还有其他事情发生了。)

答案 1 :(得分:9)

基本上,HashMap允许您存储带有标识符的项目。它们以表格格式存储,标识符使用散列算法进行散列。

通常,它们比搜索树等更有效地检索项目。

您可能会发现这有用:http://www.relisoft.com/book/lang/pointer/8hash.html

希望它有所帮助,

克里斯

答案 2 :(得分:5)

哈希(在非加密意义上)是一个笼统的术语,用于获取输入,然后生成输出以识别它。哈希的一个简单例子是添加字符串字母的总和,即:

f(abc) = 6

请注意,这个简单的哈希方案会在字符串 abc,bca,ae 等之间产生冲突。有效的哈希方案会自然地为每个字符串生成不同的值。

Hashmaps和hashtables是数据结构(如数组和列表),它们使用散列来存储数据。在散列表中,生成散列(来自提供的键或来自对象本身),该散列确定对象存储在表中的何处。这意味着只要哈希表的用户知道密钥,检索对象的速度就非常快。

在列表中,相比之下,您需要以某种方式搜索列表以找到您寻找的对象。这也代表了哈希表的背后,即在不知道密钥的情况下在其中查找对象非常复杂,因为对象存储在表中的位置与其值无关,也无法在其中输入。

Hashmaps类似于哈希表,但每个对象只有一个例子存储在其中(因此不需要提供密钥,对象本身就是密钥)。

这当然是一个非常简单的解释,所以我建议你从这一点深入阅读。我希望我没有犯任何愚蠢的错误。 =)

答案 3 :(得分:1)

Hashmap用于在键值对中存储数据。我们可以使用hashmap在应用程序中存储对象,并在同一个应用程序中进一步使用它来存储,更新,删除值。 Hashmap键和值存储在存储桶中的特定条目中,此条目位置使用Hashcode函数确定。此哈希码函数确定存储值的哈希值。有关hashmap如何工作的详细说明,请参见此视频:https://youtu.be/iqYC1odZSNo