哈希表有什么意义?

Jav*_*ier 18 hashtable

我没有动态语言中数组/字典之外的哈希表的经验,所以我最近发现内部它们是通过创建键的哈希并使用它来存储值来实现的.我不明白的是,为什么不将值与键(字符串,数字等)一起存储为键,而不是存储它的哈希并存储它.

Bob*_*Gee 11

这几乎是重复的:为什么我们在哈希表而不是索引中使用哈希码?

简而言之,您可以非常快速地检查密钥是否已经存储,并且同样快速地存储新映射.否则,您必须保留一个排序的键列表,这对于存储和检索映射要慢得多.


Kon*_*lph 8

我不明白的原因是为什么不将密钥(字符串,数字等)存储的值作为密钥存储

你是如何实现的?

计算机只知道数字.哈希表是一个表,即一个数组,当我们向下直到它时,一个数组只能通过一个整数非负索引来寻址.其他一切都是骗局.允许您使用字符串键的动态语言 - 它们使用技巧.

一个这样的技巧,通常是最优雅的,只是计算密钥的数字,可重现的"哈希"数,并将其用作索引.

(还有其他一些考虑因素,例如压缩关键范围,但这是最重要的问题.)


Dur*_*n.H 6

什么是哈希表?

它也被称为哈希映射是用于实现关联数组的数据结构.它是一种可以将键映射到值的结构.

这个怎么运作?

哈希表使用哈希函数来计算桶或槽阵列的索引,从中可以找到正确的值.

请参见下图清楚解释.

在此输入图像描述

好处:

在尺寸合适的哈希表中,每次查找的平均成本与表中存储的元素数量无关.

许多哈希表设计还允许任意插入和删除键值对.

在许多情况下,哈希表比搜索树或任何其他表查找结构更有效.

缺点:

当条目数非常小时,哈希表无效.(但是,在某些情况下,可以通过将哈希值与密钥一起保存来减轻计算哈希函数的高成本.)

用途:

它们广泛用于多种计算机软件,特别是关联数组,数据库索引,缓存和集合.