java hashmap源代码了解

来源:互联网 发布:bios windows whql支持 编辑:程序博客网 时间:2024/05/23 11:47

昨天面试官问我  用java实现hashmap

我直接蒙蔽了,所以回来看了看hashmap是个什么东西?

via:什么是哈希表和哈希算法?


比如这里有一万首歌,给你一首新的歌X,要求你确认这首歌是否在那一万首歌之内。


无疑,将一万首歌一个一个比对非常慢。但如果存在一种方式,能将一万首歌的每首数据浓缩到一个数字(称为哈希码)中,于是得到一万个数字,那么用同样的算法计算新的歌X的编码,看看歌X的编码是否在之前那一万个数字中,就能知道歌X是否在那一万首歌中。


作为例子,如果要你组织那一万首歌,一个简单的哈希算法就是让歌曲所占硬盘的字节数作为哈希码。这样的话,你可以让一万首歌“按照大小排序”,然后遇到一首新的歌,只要看看新的歌的字节数是否和已有的一万首歌中的某一首的字节数相同,就知道新的歌是否在那一万首歌之内了。


当然这个简单的哈希算法很容易出现两者同样大小的歌曲,这就是发送了碰撞。而好的哈希算法发生碰撞的几率非常小。



作者:知乎用户
链接:https://www.zhihu.com/question/20820286/answer/88812256
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
hashMap  在我了解之中应该是一个链表加数组的结构 数组是主体  里面存储了每个链表的头部,链表更像是分支的结构。

不得不说的是hashmap中的entry[]里面有 key值 value  hash值(作用一级定义见上面知乎)  next  类似指针  

next是一个entry变量

hashmap的方法

add  remove  get (通过k,通过v)

add方法

先查找有没有相同的key如果有则只是修改值 如果没有则新建一个entry根据key计算出hash值,然后根据hash值插入主数组next指向原来这个位置的entry,如果原来这个地方是空的,则next为空

大概就是这样,写的不好看到什么不对的,麻烦喷我一下。谢谢大家。