HashMap是什么?HashMap的底层原理是什么?

HashMap?这到底是是个什么东东?

要想了解HashMap,首先我们回到数据结构了解一下 ”散列表“

散列表,也被称为哈希表,这种数据结构主要提供了键(Key)值(Value)的关系,key-value?听起来是不是很熟悉?没错这就是散列表的本身面目,给出其中一个Key就能找到它所匹配的Value。

我们都知道数组的查询效率要远远高于链表,因为它可以根据下标随机的访问数组元素,其实哈希表本质也是一个数组。

可是数组只能根据下标,像a[0]、a[1]、a[2]、a[3] 这样来访问,而散列表的Key则是以字符串类型为主的。 例如:以学号作为Key,输入“1008611”查询到“小刚”。

那么问题来了,数组是通过下标来查找元素的,作为散列表的HashMap呢,,,搞什么这个东西有下标嘛?它和数组有毛关系?这个时候我们们就需要一个“中转站”通过某种方式将Key和数组下标进行转换。这个中转站就是 ”哈希函数“
在这里插入图片描述
这个所谓的哈希函数是怎么实现的呢?
在Java及大多数面向对象的语言中,每一个对象都有属于自己的hashcode,这个hashcode是区分不同对象的重要标识。无论对象自身的类型是什么,它们的hashcode都是一个整型变量。既然都是整型变量,想要转化成数组的下标也就不难实现了。最简单的转化方式是什么呢?是按照数组长度进行取模运算。index = HashCode (Key) % Array.length

通过哈希函数,我们可以把字符串或其他类型的Key,转化成数组的下标index。如给出一个长度为8的数组,则当key=001121时:
index = HashCode (“001121”) % Array.length =1420036703 %8 = 7

最后来总结一下
HashMap是一个无序散列表,它存储的内容是键值对(key-value)映射。实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null。HashMap的数据结构为数组+链表,依靠哈希函数将key和数组下标进行转换来达到存取的目的。

推荐《漫画算法》,本文也是看过这本书有感而发,主要是面试问道HashMap被虐了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值