java 基础--怎么理解哈希表

我们平时进程接触哈希表或者复写hashCode,我们有知道这样使用就能够提升代码效率.比如在二分查找时候,可以将时间复杂度从: O(n)–>O (lg n).

然后,学习应该知道’所有’,更应该知道’所以然’;本文章主要对哈希表这一数据结构进行理解;

什么是哈希表Hash函数

哈希表:通过关键字更高效率的获取数据的一宗数据结构.具体方法就是将关键字,映射成数字,数字找到位置.而这种映射的方法:Hash函数.

Hash函数:key的类型有很多:String,int,Object…最终可以通过hash函数转换成int,key相同,则hashCode相同.同时为了保证离散,提高效率,key只有有一点变化,hashCode 的变化更大;

哈希碰撞:key 不同,而HashCode 可能相同.这种称为Hash碰撞.我们应该减少哈希碰撞

如何减少哈希碰撞?

这里写图片描述

以hashMap 举例:
HashMap 的结构,以数组:链表,红黑树组成的数据结构:
为了减少哈希碰撞,采取了以下措施:

  • 1.数组可二倍扩容,并且可以将发生碰撞的链表/红黑树,进行分流到新扩容的数组;
  • 2.链表和红黑树进行相互转化,较少(<8)是链表,较多的时候是红黑树
  • 3.对于传进来的hash 会在进行一次Hash 计算:

    Objects.hashCode(key) ^ Objects.hashCode(value)
总结:

1.哈希表是一种优化存储的思想,具体存储元素依然是简单的数据结构;
2.基本逻辑就是:将key转化成int,从而更好的利用数据查找快的特点;
3.为了提高效率,就应该减少哈希冲突

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值