Hash算法

以前也经常用到hash算法,都是百度下,知道其大概意思,并未深刻领会其意义,这次认真学习了下,做次总结记录下。

哈希算法,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值,较常用的有MD5和SHA。

hash算法,其本质就是映射。理解了这点才能真正使用hash算法。

Java中比较常用就是hashmap,其使用原理是如何呢?

Hash本质就是映射,hashmap是以key,value形式存值的,通过将key映射后,取值就非常方便了,时间复杂度可以近似达到O(1)。(为什么是近似,稍后解释)

Hashmap会将元素存储在一个Bucket中的entry结构体中,然后将key映射到桶中单个entry中,但是当存储的值很多,则会存在多个Key 映射成同一个hashcode,hashmap采用了地址链表法解决这个问题,即


这也是为什么其时间复杂度近似O(1)。

     既然hash算法这么优秀,为什么数据库索引基本用的是B+tree,而不是hash呢?这是hash算法有他的劣势,例如范围查找用hash算法就需要对整表遍历,任何数据结构和算法都是针对特定情境的。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值