您的位置:首页 > 其它

Hash算法

2016-09-08 19:35 281 查看
以前也经常用到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算法就需要对整表遍历,任何数据结构和算法都是针对特定情境的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hashmap