好久没写博客了,最近在找工作,把找工作中遇到的问题在这里记录一下,也当是放个松吧,后面估计会开算法、数据结构、操作系统、计算机网络、数据库几个专题吧,把面试过程中学到的东西都记录一下,这篇就主要记录一下Hash相关的知识。这篇主要记录一下什么是哈希,哈希有什么用,哈希怎么实现,七七八八的东西。
一、哈希是什么
哈希又叫散列,主要通过一个函数将不定长的输入映射成一个定长的输出,这个映射而成的输出又被称为散列值。实际上就是一个函数映射,我们输入的是想进行变换的数据,也就是函数的自变量,它的取值范围是没有限制的,也就是上面说的不定长的,而函数的值域是有限的,也就是上面说的定长输出,这就是哈希的基本特点。通过上面的描述也不难得到以下几个特点:
1.由于哈希是将没有范围限制的数据转换成固定范围的散列值,因此必然存在不同的输入有相同的输出的情况。(专业点说叫做哈希冲突)
2.基于特点1,我们又可以知道,如果只给我们哈希后的结果是没有办法推出具体的输入是什么的。因为一个散列值可能对应多个输入。
3.如果两个输入的哈希值不同,那么这两个输入一定不同。
其实这些特点,有点废话了,因为这其实就是函数的基本特点。那么根据这些特点我们能做些什么事情呢?
二、哈希有什么用
哈希的用途我在这里会把他们总结成两类,一个是用作存储,另一个则是用来做信息安全。这一节就简单写一下吧,后面会有一个展开。
1.哈希做存储
首先,当然是很常用的hashtable,hashmap了,他们的特点就是查找非常快,如果不考虑哈希冲突的问