这纯属个人的学习认识,有错的地方,希望各位指正。
散列函数也就是哈希函数;可以简单来说是一种映射关系,也就是y=f(x),
可以说是一种可以满射但非单射的映射关系,比如MD5,这种128位的密码加密算法,也是解决不了单射,也就是有碰撞。128位是超大的数据,我算过64位就是16EB了,所以128位是人类根本用不完的,但确是可以用完的有限的。所以我说哈希是一种非单射且满射的对应关系,但是我们还是在努力的避免哈希碰撞,也就是想努力的实现单射状态(或双射)。

每当我们存入一个key,这个key就是x,根据key算出哈希值y,然后存储数据。
哈希为什么存在?(有了地址值为什么还需要哈希值)
这次我总算明白了,比如,Map<> map = new Map<>(); 这个map在内存中只会有一个地址值(也就是整个Map使用一个地址值),而要寻找里面的Map的某个对象]怎么办?那就是使用哈希算法,由key(也就是),算出一个哈希值y,这个y就保存在对象头,相同的key一定得到相同的y。但是不同的key,也会得到一样的y。这也许和计算机只有0和1有关。如果得到相同的key,那可以用链表结构存储。
redis中集群分布,对哈希的理解:
RedisCl

哈希函数是一种非单射且满射的映射关系,如MD5,尽管存在碰撞问题。在数据存储中,哈希值用于快速定位数据,例如在Map中通过key计算哈希值来找到对象。在Redis集群中,采用哈希函数进行槽分区,通过CRC16[key]&16383将键映射到特定主机。哈希碰撞可能导致数据冲突,通常通过链表结构解决。哈希函数的主要特性包括:固定位数的哈希值、不可逆性、相同key对应相同哈希值,以及不同key可能对应相同哈希值。
最低0.47元/天 解锁文章
3637

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



