关于java中的hash

昨天,重温了一下数据结构中的hash散列算法,将值和地址挂钩,是的,在c中可以这样搞,因为c有指针,可以直接操作内存地址,然后通过偏移量直接找到地址,因为知道hash算法的函数公式。但是java中,理论上来说没有指针,无法直接操作地址,那么它如何存储查询hash表,如HashTable,HashMap?只有看源代码了。。。这里hash基本概念不再累述,如负载因子,线性法,溢出区法,地址链表法。。。原来在Java中,HashTable计算hash的时候是这样的:先h ^= (h >>> 20) ^ (h >>> 12),再return h ^ (h >>> 7) ^ (h >>> 4);h是对象的hashcode(知道为啥effective java中说重写equals的时候要重写hashcode了吧)。其中就说put(k,v)这个方法吧,在put方法中,先用上面的方法计算hash值,然后计算index索引,其实hash表就是一个大的数组(hash表),index是放入数组的位置,其中index 的算法是hash值&数组的长度-1,然后就往数组里放,如果当前数组中的值大于等于极限值,那么将数组大小*2。所以java中的hashtable其实就是数组,在c中的地址操作改成了数组的操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值