HashMap底层实现原理?

1、HashMap集合底层是哈希表数据结构,该哈希表是由数组和单链表共同组成的,数组初始化容量是16,加载因子是0.75,扩容机制是扩容为原来的2倍。数组中存的是某个单链表的头节点。在jdk8以后,如果单链表中的元素超过8个,这个单链表就会变成红黑树,当红黑树中的元素少于6,又会重新变回单链表,这样做是为了提高检索效率,因为二叉树的检索会再次缩小检索范围。

2、map.put(k,v)实现原理(向HashMap中存数据的步骤):

先将k和v封装到Node对象中,Node是单向链表中的节点对象,它实现了Map.Entry接口。

底层调用k的hashCode()方法,得出hash值。

通过哈希算法,将hash值转换成数组的下标,如果下标位置没有元素,就把Node添加到这个位置;如果下标位置有链表,就用k和链表上的k进行equals,遇到返回true,就用v覆盖原来的value,如果返回的全是false,那么就把新节点Node添加到这个链表的末尾。

3、map.get(k)实现原理(从HashMap中取数据的步骤):

底层调用k的hashCode()方法得出hash值。

通过哈希算法,将hash值转换成数组的下标,如果下标位置没有元素,那么get方法返回null;如果这个下标位置有单向链表,那么拿着k和链表上每个Node的k进行equals,如果遇到返回true,那么此节点的value就是get方法的返回值,如果返回的全是false,那么get方法返回的就是null。

alt

全部评论

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务