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

全部评论

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务