作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
释放21集全网最深ConcurrentHashMap的vip视频,复现每一行源码
概述
哈希算法(Hash)又称摘要算法(Digest)。
哈希算法是一种重要的加密算法,其核心思想是将任意长度的数据映射为固定长度的哈希值,这个哈希值通常用于验证数据的完整性、索引数据和加速数据查找。
在Java中,hashCode()方法是一种哈希算法的应用。它将字符串映射为一个固定长度的整数值,并满足了哈希算法的两个重要特点:
- 相同的输入一定会得到相同的输出
- 不同的输入大概率得到不同的输出。
在实际编程中,我们经常需要根据对象的哈希值来进行数据存储和查找,比如使用哈希表等数据结构。为了确保正确性,如果一个类覆写了equals()方法,就必须同时覆写hashCode()方法,以保证相同的对象具有相同的哈希值,从而确保在基于哈希值的数据结构中能够正确地执行查找、插入和删除操作。
哈希碰撞
哈希碰撞指的是在哈希算法中,两个不同的输入数据经过哈希函数运算后产生了相同的哈希值。也就是说,两个不同的输入数据经过哈希函数计算后得到的哈希值是一样的。这种情况被称为哈希碰撞。
哈希碰撞可能会导致一些问题,特别是在哈希表等数据结构中。因为哈希表是通过哈希值来确定数据存储位置的,如果两个不同的键具有相同的哈希值,就会发生冲突。在发生冲突时,通常会有一些解决冲突的方法,比如链地址法、开放寻址法等。
虽然绝对避免哈希碰撞是不可能的,但好的哈希函数会尽量降低碰撞的概率。通常情况下,当输入数据足够大,哈希函数的设计足够均匀时,哈希碰撞的概率会很低。因此,在选择哈希算法和设计哈希函数时,需要考虑到哈希碰撞的可能性,尽量选择高效且低碰撞的哈希函数。
常用的哈希算法
| 算法 | 输出长度(位) | 输出长度(字节) |
|---|---|---|
| MD5 | 128bits | 16bytes |
| SHA-1 | 160bits | 20bytes |
| RipeMD-160 | 160bits | 20bytes |
| SHA-256 | 256bits | 32bytes |
| SHA-512 | 512bits | 64bytes |

最低0.47元/天 解锁文章
628

被折叠的 条评论
为什么被折叠?



