HashMap之我之理解

今天去面试了一下,被问到hashmap的实现原理。 在网上查看了一下,并且配合源代码。现总结如下:

hashmap 采用的是数组加链表的方式进行存储的,  定义了一个内部类entry, 里面存了4个值。我们在put的是,会根据key去计算hash值,把值放到数组对应的下标上去。 如果hash值相同了,则使用链式存储,把值存在他的next中。 取出的时候会根据key的hash值去对应下标去取值出来。这样就会很快速的取出对应的值了。jdk1.8中还增加当我们恰好要根据key寻找一个在链表上的对象的时候,就涉及到遍历链表,逐个调用key对象的equals方法来比对我们要查找的到底是哪个键值对了。可想当链表的长度越长,匹配的时间复杂度就越高,和链表的长度成正比。这也就是HashMap内部实现时会根据链表的长度超过限定的阈值时,会将链表结构转换为红黑树结构,用来提升查询性能。replacementTreeNode方法就是此时被调用。TreeNode类也就是红黑树的节点对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值