hash原理的理解

1.Hash原理的理解
哈希:翻译是 散列 意思是分散的意思,通常我们在查找某个数据的时候,我们想快速定位到某条数据,我们会采用哈希算法来解决这个问题。


JAVA哈希的底层实现:其实是基于桶结构来处理的,也就是一个数组结构,然后里面的元素是NODE元素,这个数据结构是链表来实现的,里面的变量有 hash,key,value,next,通过这种方式,我们能够大大减少数据的范围,Eg:hashMap 里面每次会默认分配16大小的一个桶,我们每次存放数据的时候,会通过当前的HASH值和当前桶的大小做一个与运算,这样能够定位到我们即将要寻找或存放的数据放在哪个桶里面,这样在大量数据基础上,其实能够排除接近n-1/n的数据量。
具体操作:
1.判断当前map中是否存在该桶结构,如果不存在,则resize()


2.通过 当前桶的大小 和 hash值 做与运算,这样能获取桶的索引值,如果不存在该桶,那么则新建一个桶,如果存在,则去遍历该桶里面的链表结构,查看是否存在同样的key值,而判断是否存在该key值得条件是


a.如果该链表中的hash值与新要加入或判断的hash值一样,并且 如果key的栈地址一样或者 key不等于空并且key.equals(k)内容一样的话,那么就覆盖旧值。
否则如果找不到该key 则新建一个Node 跟在已有链表中。


3.通常在我们自定义的类中,如果需要判断对象是否相同的话,我们通过需要覆写override Object类型的  equals 和 hashCode 方法,因为Object 中hashCode生成规则 是类名加上 该对象的内存地址,这个方法是 native方法,通过C语言写的,所以这部分没有开源。


Integer 是通过数字本身来生成 hashcode
String 则是 char[] 则是比较每一个字符来看equals是否相等,


如果我们需要比较一个类的多个属性是否相等的话,我们是可以将多个属性值拼接在一起形成一个key值,来进行比较,这样的就省去了比较多个属性的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值