当人们说Hashmap比List更快时,我对 Hashmap 或 Hashtable 概念更加困惑。我清楚地看到散列概念,其中值存储在给定密钥的哈希码中。
但是当我想要检索数据的工作方式时, 例如,我在HashMap中存储 n个字符串和 n个不同的键。 如果我想检索与特定键相关联的特定值,它将如何在 O(1)中返回它?因为哈希键将与所有其他键相比对吗?
答案 0 :(得分:0)
让我们继续一个单词的旅程,说你有一堆奇怪的m& m的所有字母。
现在你的工作就是以他们选择的字母颜色组合为人们提供m& m's。
您可以选择如何整理商店。 (这种组织行为将隐喻我们的哈希函数。)
您可以按颜色或字母或两者将M& M分类为桶。问题如下,是什么为您提供了特定请求的最快检索时间?
答案是相当直观的,因为每个桶中提供最少不同M& Ms的排序有助于最有效的排队。
让我们说有人问你是否有任何绿色Q;如果您的所有M& M都在一个垃圾箱或列表或桶或其他非结构化容器中,那么与保留有组织的商店相比,O(1)中的答案将远远无法访问。
这个比喻依赖于Separate chaining的概念,其中每个hash-Key对应一个多元素的容器。
如果没有这个概念,散列的概念更普遍地是在整个数组中均匀地使用密钥,使得摊销的性能是恒定的。可以通过各种方法变体解决冲突,维基百科文章将告诉您所有相关信息。 http://en.wikipedia.org/wiki/Hash_table
“如果键值对的集合是固定的并且是提前知道的(因此不允许插入和删除),可以通过仔细选择散列函数,存储桶表大小和内部数据结构。特别是,人们可以设计一个无冲突的哈希函数,甚至是完美的“