Java Map集合框架及HashMap 底层实现

在这里插入图片描述
HashMap :
实现原理:基于Map接口实现,数据结构采用数组 + 链表 + 红黑树,元素以键值对的形式存储,使用key的二次hash定位数组的位置和key是否重复。HashMap中使用可允许key和value为null, key为null只能出现一次。HashMap在多线程的情况下是不安全的,并且存储的元素是无序的;
在这里插入图片描述

源码理解:
get操作
在这里插入图片描述
1.判断表是否为空,或者带检查的桶是否为空;

2.检查第一个node的key hash是否为要查找的原属,如果是的还直接返回;

3.获取下一个节点判断类型是否是树节点,如果是使用getTreeNode()获取结果;

4.如果是链表遍历链表获取key的值;

put操作:

在这里插入图片描述
在这里插入图片描述
1.表为空或者长度为0 ,使用resize 初始化表,为表分配空间
2.二次散列出的桶为空直接插入元素
3.如果桶不为空,判断首节点的hash是否与插入的key的hash相同,如果相同直接赋值替换;
4.判断下一个点的类型是否是TreeNode,是putTreeVal写入节点;
5.遍历链表并判断key的hash是否存在,存在赋值替换;并且判断链表的节点数是否大于8,大于8使用treeifyBin将链表转为红黑树。
6.不存在将元素节点添加到链表最后;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值