HashMap.put(k,v)和v=HashMap.get(k)实现原理

  HashMap底层的数据结构是哈希表,又称散列表。哈希表集合了数组和链表的优点,底层是一个node数组,而数组里面的每一个元素都是一个单链表。每个node都有四个属性分别是:**object  k,  object v, int  hash, node next**。


    hashmap.put(k,v)实现原理

 第一步:将key值和value值封装成一个node对象中;

第二步:通过key的hashCode()方法,得到其对应的哈希值;

第三步:通过哈希函数将哈希值转换为对应的数组下标并进行判断;

第四步:如果对应数组下标的位置上没有任何元素,那么则直接将node添加到该位置;如果对应数组下标位置上有链表,那么调用equals方法与链表上的node对象的key值进行比较

如果返回的全是false,那么直接将该节点插入到链表尾段,如果其中某一个节点返回true,那么将该节点的value值覆盖,完成添加。

 

   v=HashMap.get(k)实现原理

第一步:通过key的hashCode()方法,得到其对应的哈希值;

第二步:通过哈希函数将哈希值转换为对应的数组下标并进行判断;

第三步:如果对应数组下标位置上没有任何元素,v=HashMap.get(k)返回null;如果对应数组下标位置上有链表,那么调用equals方法与链表上的node对象的key值进行比较,如果返回的全是false,那么v=HashMap.get(k)返回null;如果其中某一个节点返回true,那么此节点的value就是我们要找的值,get方法返回该值。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值