【数据结构】 HashMap源码分析(常量+构造方法+方法)


HashMap源码分析

一、成员常量

在这里插入图片描述

二、构造方法

在这里插入图片描述

  • 通过构造器可以传指定的容量大小和指定的负载因子
  • 只有一个参数的构造方法,相当于拿指定的容量大小和默认的负载因子,调用两个参数的构造方法

在这里插入图片描述

  • 对应它的无参构造方法,默认没有分配大小,只给了默认的负载因子

三、方法

1.put

在这里插入图片描述

  • 拿到key后,先通过hash方法,得到一个更均匀的异或值,然后进入putVal方法

在这里插入图片描述

1.此时假定为进行了无参构造,没有分配内存
  • 当table没有分配内存时,为null,进入if语句,执行resize()方法

在这里插入图片描述

在这里插入图片描述

  • 无参构造的HashMap对象,在第一次put时,数组大小分配为默认容量16
  • 而当table不为空的时候,进行hash值的计算

在这里插入图片描述

  • HashMap一般会保证,数组的容量是2的某个次幂

在这里插入图片描述

  • 当p==null时,该位置第一次插入结点,直接进行插入
  • 否则,遍历链表进行尾插法
  • 尾插之后,判断结点个数是否>=7,进入treeifyBin方法进行判断是否进行树化

在这里插入图片描述

  • 当数组大小超过64,并且结点超过7时,树化链表,变成红黑树

同理:在删除结点的时候,如果不符合树化条件,会进行解树化,重新变成链表

在这里插入图片描述

2.当发生有参构造时,完成对容量的大小判断后,将容量大小,传进tableSizeFor方法中:

会得到一个接近2次幂的数

在这里插入图片描述

点击移步博客主页,欢迎光临~

偷cyk的图

相关推荐

  1. HashMap的putVal方法分析

    2024-03-27 08:32:06       25 阅读
  2. hashmap中的put方法存放数据解析

    2024-03-27 08:32:06       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 08:32:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 08:32:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 08:32:06       82 阅读
  4. Python语言-面向对象

    2024-03-27 08:32:06       91 阅读

热门阅读

  1. 精通c++系统编程

    2024-03-27 08:32:06       40 阅读
  2. JVM介绍

    JVM介绍

    2024-03-27 08:32:06      37 阅读
  3. 北斗导航 | 卫星导航领域会议汇总

    2024-03-27 08:32:06       47 阅读
  4. caffe | caffe源码中添加upsample层

    2024-03-27 08:32:06       36 阅读
  5. Spring Boot

    2024-03-27 08:32:06       38 阅读
  6. RHCE-2-chrony服务器

    2024-03-27 08:32:06       28 阅读
  7. 云原生周刊:Kubernetes v1.30 一瞥 | 2024.3.25

    2024-03-27 08:32:06       37 阅读
  8. 使用Asible自动化Linux管理任务

    2024-03-27 08:32:06       36 阅读