HashMap扩容后,元素是如何重新分布的

上文回顾

在上文深入源码分析HashMap到底是怎样将元素put进去的

我们着重分析了无参构造函数是如何创建map对象和HashMap是如何将第一个元素puttable的。

此篇重点

这篇我们将逐行代码分析

1、有参构造函数是如何创建map对象的
2、当元素增多导致扩容之后,元素是如何重新分布的

同样,为了方便读者复盘,我截取源码是尽量将行号带上。

jdk版本还是1.8

结构图

再重复一遍,HashMap的底层数据结构为数组+链表+红黑树的结构,放一个HashMap的结构示意图,有个大致印象。
在这里插入图片描述

解剖思路

创建一个有参构造函数,并往其中添加若干元素,直至触发扩容机制

为了方便方便计算hash值,key和value都选用比较小的字符串

关于调试键的使用请参照:IDEA调试键的说明,在此不再赘诉

调试代码

public static void main(String[] args) {
   

        System.out.println("★★★★★★解剖开始★★★★★★");

        HashMap<String, String> map = new HashMap<>(12);

        map.put("1", "1");
        map.put("2", "2");
        map.put("3", "3");
        map.put("4", "4");

        // 实验key相同的情况
        map.put("4", "D");

        map.put("5", "5");
        map.put("6", "6");
        map.put("7", "7");
        map.put("8", "8");
        map.put("9", "9");
        map.put("10", "10");
        map.put("11", "11");
        map.put("12", "12");

        // 第一个扩容点
        map.put("13", "13");
        map.put("14", "14");
        map.put("15", "15");
        map.put("16", "16");

        map.put("17", "17");
        map.put("18"
  • 49
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值