Hash的定义
散列(哈希)函数
- 把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值,是一种压缩映射。
- 或者说一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
Hash函数特性
h(k1)≠h(k2)则k1≠k2,即散列值不相同,则输入值即预映射不同
- 如果k1≠k2,h(k1)=h(k2) 则发生碰撞;
- 如果h(k1)=h(k2),k1不一定等于k2;
HashCode是什么
HashCode是Object的一个方法,hashCode方法返回一个hash code值,且这个方法是为了更好的支持hash表,比如String,Set,HashTable、HashMap等;为什么要重写HashCode
如果用 equal 去比较的话,如果存在1000个元素,你 new 一个新的元素出来,需要去调用1000次equal去逐个和他们比较是否是同一个对象,这样会大大降低效率。hashcode实际上是返回对象的存储地址,如果这个位置上没有元素,就把元素直接存储在上面,如果这个位置上已经存在元素,这个时候才去调用equal方法与新元素进行比较,相同的话就不存了,散列到其他地址上HashCode的作用
减少查找次数,提高程序效率
例如查找是否存在重复值h(k1)≠h(k2)则k1≠k2,首先查看h(k2)输出值(内存地址),查看该内存地址是否存在值;如果无,则表示该值不存在重复值;如果有,则进行值比较,相同则表示该值已经存在散列列表中,如果不相同则再进行一个一个值比较;而无需一开始就一个一个值的比较,减少了查找次数
[
](https://blog.csdn.net/m0_37700275/article/details/82800590)