关于HashMap

常识:哈希法

         散列法(Hashing)或哈希法是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,

     称为散列法,也叫哈希法。

1.什么是HashMap?

     HashMap是基于哈希表的Map接口的非同步实现, 实际上是一个“链表散列”的数据结构,即数组和链表的结合体.

     也可以说是一个用于存储Key-Value键值对的集合,每一个键值对也叫作Entry.

     这些个键值对分散存储在一个数组中,这个数组就是HashMap的主干;

     数组中的每一个元素的初始值都是Null.

2.你为什么会用HashMap?

     HashMap可以接收null键值和值,而HashTable则不能;

     HashMap是非同步的,相对而言会很快;

     HashMap存储的是键值对,以一种数据之间的对应关系.

3.简述一下HashMap的工作原理

     HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,

     它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。

     当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。

     HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。

     HashMap在每个链表节点中储存键值对对象。 

4.你知道HashMap的get()方法的工作原理吗?

     首先根据对象的Hash值进行数组方面的寻找,然后找到这个数组之后,判断key是否唯一,如果是唯一则直接返回,

     如果不唯一,则使用equals进行值的判断,最后返回数据.

5、当两个对象的hashcode相同会发生什么?

     因为hashcode相同,所以它们的bucket位置相同,‘碰撞’会发生。因为HashMap使用链表存储对象,这个Entry(包含有键值对的Map.Entry对象)     会存储在链表中。这个时候要理解根据hashcode来划分的数组,如果数组的坐标相同,则进入链表这个数据结构中了,一般的添加都在最前面,也就是     和数组下标直接相连的地方,链表长度到达8的时候,jdk1.8上升为红黑树

6、如果两个键的hashcode相同,你如何获取值对象?

     当我们调用get()方法,HashMap会使用键对象的hashcode找到bucket位置,然后获取值对象;

     如果有两个值对象储存在同一个bucket,将会遍历链表直到找到值对象。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值