Java学习--Hashmap的put与get解析

        HashMap是java集合中最常用的几种集合之一,其在java8版本之后,采用了数组+链表+红黑树的结构实现,其中,数组是HashMap的主体,而当产生哈希冲突时,就会形成链表,当链表长度超过阈值时,链表会转换为红黑树。由于其是一段连续的存储单元,所以在查询方面速度较快,时间复杂度为O(1),而在删除和新增则相对会慢一些,时间复杂度为O(n),其常用两种方法,一种是put,一种是get,其中,get方法的源码如下:

   

计算key的hash值,找到数组中的位置,检查第一个节点,如果第一个节点不匹配,则进行判定,如果是树节点,则调用树节点的查找方法;如果是链表,就遍历链表查找,如果可以找到,则返回节点,否则返回null。

        而put方法的流程是:先计算key的hash值,如果数组为空,初始化数组(默认大小16),计算元素在数组中的位置,如果该位置为空,直接插入,如果该位置不为空,则判断key值:如果key相同,覆盖value,如果是树节点,调用树节点的插入方法,如果是链表,遍历链表,如果找到相同key则覆盖,否则插入链表尾部,插入后判断链表长度是否超过8,超过则转换为红黑树,如果size超过阈值,进行扩容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值