关于hash,网上很多解释都过于晦涩难懂,而且对哈希到底有什么用并没能讲明白。今天在知乎上看到了一个小哥很不错的讲解:
哈希算法
的本质是对原数据的有损压缩。有损压缩后的固定字长用来唯一标识原数据。 如果不同的原数据在采用这种有损压缩算法后产生了相同的结果,我们将这种现象称为“哈希碰撞”
。哈希碰撞的产生几率能够衡量一个哈希算法的好坏。哈希表
则属于一种存储结构,我们最常用的存储结构是顺序存储结构和链式存储结构,这两种结构的共同特征就是元素与元素之间存在映射关系。 而哈希表的元素之间相互独立。哈希表具体的实现方式是给定一个参数,称为“键”。参数的类型可以是任何类型的数据,诸如字符、字符串、整型等等。 然后根据该参数通过哈希算法计算生成的值来定位“键”对应的元素的存储地址。例如给定一个字符串参数 "str",该键对应的元素是"jack", 那么"jack"的存储地址就是通过哈希算法对"str"进行加工生成的。如此一来,每当我们存取元素时不会像传统的数据结构逐个遍历、一一对比,而是通过哈希算法直接获取值的存储地址,所以哈希表会比传统的数据结构更为高效,这也是我们使用哈希表存储数据的原因。
原文链接: 到底什么是hash?