千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  应聘面试  >  大数据面试题  > hashmap是如何实现的?

hashmap是如何实现的?

来源:千锋教育
发布人:syq
时间: 2022-11-15 19:21:54 1668511314

  HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。

  当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,计算并返回的hashCode是用于找到Map数组的bucket位置来储存Node对象。

hashmap是如何实现的

  这里关键点在于指出,HashMap是在bucket中储存键对象和值对象,作为Map.Node 。

  以下是HashMap初始化 ,简单模拟数据结构**Node[] table=new Node[16]** 散列桶初始化,tableclass Node {hash;//hash值key;//键 value;//值node next;//用于指向链表的下一层(产生冲突,用拉链法)} 以下是具体的put过程(JDK1.8版)

  1、对Key求Hash值,然后再计算下标

  2、如果没有碰撞,直接放入桶中(碰撞的意思是计算得到的Hash值相同,需要放到同一个bucket中)

  3、如果碰撞了,以链表的方式链接到后面

  4、如果链表长度超过阀值( TREEIFY THRESHOLD==8),就把链表转成红黑树,链表长度低于6,就把红黑树转回链表

  5、如果节点已经存在就替换旧值

  6、如果桶满了(容量16*加载因子0.75),就需要 resize(扩容2倍后重排) 以下是具体get过程(考虑特殊情况如果两个键的hashcode相同,你如何获取值对象?)

  当我们调用get()方法,HashMap会使用键对象的hashcode找到bucket位置,找到bucket位置之后,会调用keys.equals()方法去找到链表中正确的节点,最终找到要找的值对象。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT