全国服务热线:18980020603 成都热线:028-86633922
新闻中心网站专题联系我们
行业新闻 建站经验 网站建设资讯 手机网站资讯 微信网站建设资讯 APP开发资讯 商城网站资讯

成都网站建设:HashMap的工作原理是什么

发布人:桔子科技    发布时间:2017-09-24 15:16:05    分享到:

问题引入:面试,牛客网刷题哪个能少得了HashMap的工作原理,对此你知道多少?

\

1、什么是HashMap?你用过吗?

ok,HashMap可以接受null键值和值,HashTable不能;HashMap是非synchronized;HashMap很快,HashMap存储的是键值对。。。balabala。。。(算不菜,知道点东西)

接下来,面试官会接着说:

2、“你知道HashMap的工作原理吗?”

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

put()方法传递参数,即键key和值value。我们首先调用hashCode方法,返回的hashCode用于找到数组中bucket的位置来存储Entry对象(注意bucket存的不仅仅是值)。

面试官进一步问:

3、当两个对象返回相同的hashCode怎么办(也就是所谓的collsion detection碰撞检测)?

啊哈~无脑说,碰撞就抛出异常呗!再或者我不存储了!可以吗?

听到这样的回答,怎么说,也是解决方法吧,不算错。面试官接着给你个tip

4、equals()方法的使用?

即使两个对象的hashCode相同,但是他们可能并不相等(不是同一个对象)啊。hashCode相同只能说明他们的bucket位置相同,“碰撞”会发生。但是,HashMap使用链表存储对象,此刻的Entry(包含键值对的Map.Entry对象)是可以存储在链表中的。

差不多写入HashMap的就问的差不多了,来吧,下一步。

5、如果两个键的hashCode相同,你如何获取对象呢?

调用get()方法,使用键对象的hashCode找到bucket位置(如果没有链表就可以直接输出值对象了),接着遍历链表直到找到这个对象。

仔细分析,遍历链表的话,是不是先要知道一个值对象,然后在去遍历找到这个对象。这不是那个啥嘛,你都知道了这个对象了,那你遍历找个啥子,多此一举。

正确答案:找到bucket位置后,调用keys.equals()方法去找到正确的节点,最终找到要找的对象。(千万不要把hashCode()和equals()搞混了)。一些优秀的开发者会指出使用不可变的、声明作final的对象,并且采用合适的equals()和hashCode()方法的话,将会减少碰撞的发生,提高效率。不可变性使得能够缓存不同键的hashcode,这将提高整个获取对象的速度,使用String,Interger这样的wrapper类作为键是非常好的选择。

HashMap就这样完了?啧啧!单纯。。。

6、如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办?

好了,不拐弯抹角了。默认的负载因子是0.75。当一个map填充超过75%的时候,HashMap会扩容到两倍的bucket数组。把原来的对象放入bucket数组里,此过程叫rehashing。

7、扩容的过程会带来哪些问题?

大白话,条件竞争。那么什么是条件竞争?

举个栗子:扩容过程需要把源数据依次拿出来(HahMap中的链表中插入删除节点都是头部进行操作)。所以在多线程下,某两个线程都要将某一个HashMap扩容,它们会同时试着调整大小,扩容过程中存储在链表中元素次序会反过来。如果条件竞争发生了,那么就进入死循环了。

写个总结:

HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。

当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。


本文是成都网站建设公司、成都网站设计制作公司、成都APP开发公司、成都响应式网站建设、成都VR全景制作-桔子科技公司为您整理!
成都网站建设,成都网站设计,成都网站制作,成都网页设计,成都网站建设公司 ,成都网站设计公司,成都网站制作公司,成都网页设计公司,网站建设网站制作网站设计网页设计成都响应式网站建设、成都响应式网站制作、成都响应式网站开发、成都全景制作、成都VR全景制作成都手机网站建设,手机网站建设,成都APP开发,APP开发,成都建网站,成都做网站,成都商城网站建设,集团网站建设,网站建设,高端网站建设,品牌网站建设,成都平台网站建设,成都响应式网站建设,成都微信网站建设,成都微商城网站建设,成都微信营销,成都微信小程序开发、成都网站优化,成都网络公司。

下一篇:成都网站建设:成都选择网站公司主要看哪几个方面上一篇:成都网站建设:学习编程该从哪开始

最新案例
手机/微网站
  1. [成都]微信网站建设:微信分销系统能为商铺带来哪些特色服务
  2. [成都]微信网站建设:如何通过微信公众号来推广产品
  3. [成都]微信网站建设:微信开发都有些什么功能
  4. [成都]手机网站:手机网站设计需要达到什么效果
  5. [成都]手机网站:手机网站响应式网站解决方案
  6. [成都]手机网站:手机网站响应式网站解决方案
网络营销
  1. APP开发: APP网页评分功能设计
  2. APP开发:手机APP开发前这4点必须要了解
  3. APP开发:为什么企业要做手机APP
  4. APP开发:你可以更好的留住APP用户
  5. APP开发:开发时间的长短主要由哪些因素决定
  6. APP开发:电子商务类APP开发的4点建议
img

7x24小时售后服务

img

5倍故障时长赔付

img

15天无理由退款

img

N对一管家服务

让我们的顾问联系您

  • 电话:4006-028-024 028-86633922

    邮箱:Service@orangeapp.cn

    成都市成华区崔家店路789号上城国际1-24-9号

qq sina