全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  应聘面试  >  大数据面试题

hashmap是如何实现的?

发布时间:2022-11-15 19:21:54
发布人:syq

  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()方法去找到链表中正确的节点,最终找到要找的值对象。

相关文章

大数据kafka常见面试题——如何搭建kafka?

2023-08-07

大数据kafka常见面试题——kafka中如何避免重复消费

2023-08-04

大数据面试题之多种方法创建dataframe

2023-08-02

大数据Hadoop面试题——Hadoop干什么用的?

2023-08-01

大数据行业2年工作经验的面试题有哪些?

2023-07-28

大数据kafka面试题——kafka和flume的区别是什么?

2023-07-27
在线咨询 免费试学 教程领取