Skip to content

Instantly share code, notes, and snippets.

@arrayadd
Last active August 3, 2021 06:30
Show Gist options
  • Save arrayadd/8a4ab3f050e4b1009639e19ef347b1ad to your computer and use it in GitHub Desktop.
Save arrayadd/8a4ab3f050e4b1009639e19ef347b1ad to your computer and use it in GitHub Desktop.
到底什么是哈希Hash(1)

刚在吃饭回来的路上,走路时候闲的蛋疼,问了下自己什么是哈希?结果一下给自己搞蒙了。仔细想想工作中每天都在与这个叫哈希的家伙打交道,不是HashMap,就是MD5,SHA1的,但你若问我什么是哈希的,我压根就回答不上了来,或者说给一个确切的解释。直观感觉就是,不是中文“传统”词语,读起来就别扭,很难通过词来达意。


先找定义

从网上搜了下“哈希”,发现没有直接关于“哈希”这个词的解释,都是周边相关的,例如,哈希函数,哈希算法,散列函数,哈希表什么的。 初步给人感觉这个词语极有可能是一类东西的统称,就像水果,汽车这样词语。

后来又google了英文hash [hæʃ] 发现维基百科中关于hash在计算机方面的解释,也是罗列了一些哈希函数,哈希表这样相关词语。

接着又在知乎,果壳,CSDN等网站看了相关话题讨论,最后在百度中找到一条,感觉和上面这些网站及搜索结果比较接近,没有大出入的,接近的“定义”

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将不固定长度的值压缩到某一固定长度的值的函数


可能接近正确的理解

哈希 Hash这个词,不放在上下文中,单独提出来的话,在计算机领域,应该有以下多重意思。

  1. 作为名词,指哈希函数。(和哈希算法,散列函数,散列算法,消息摘要函数,消息摘要算法,指的是同一种东西)
  2. 作为动词,指执行哈希函数这一行为的过程

譬如:尿一泡尿,其中尿字既是动词又是名词的,具体指那种意思需要根据使用时候的前后扯淡环境来区分。 突然又想到一个有意思句子,我给人打了 到底是我把别人打了,还是别人把我给削了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment