java  HashMap扩容详解及实例代码

发布时间 - 2026-01-10 23:07:43    点击率:

HashMap扩容

前言:

HashMap的size大于等于(容量*加载因子)的时候,会触发扩容的操作,这个是个代价不小的操作。

为什么要扩容呢?HashMap默认的容量是16,随着元素不断添加到HashMap里,出现hash冲突的机率就更高,那每个桶对应的链表就会更长,

这样会影响查询的性能,因为每次都需要遍历链表,比较对象是否相等,一直到找到元素为止。

为了提升查询性能,只能扩容,减少hash冲突,让元素的key尽量均匀的分布。

扩容基本点

加载因子默认值是0.75

static final float DEFAULT_LOAD_FACTOR = 0.75f;

容量的默认值是16

 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 等于16

HashMap提供了一个构造参数,可以在创建的时候指定容量和加载因子。

 public HashMap(int initialCapacity, float loadFactor)

默认的情况下,HashMap 的size一旦大于等于16*0.75=12的话,

同时每个Entry(或者叫桶)里面至少有一个元素的时候就会进行扩容。

 if ((size >= threshold) && (null != table[bucketIndex])) {
      resize(2 * table.length);
      hash = (null != key) ? hash(key) : 0;
      bucketIndex = indexFor(hash, table.length);
}

扩容的时候,容器容量翻倍

 resize(2 * table.length);

扩容的时候需要重新计算元素的数组下标

1、重新分配一个新的Entry数组
2、重新计算原来元素的在新数组中的下标(比较耗资源)

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # HashMap扩容  # HashMap扩容详细介绍  # HashMap扩容详解  # ArrayList及HashMap的扩容规则讲解  # Java8 HashMap扩容算法实例解析  # 基于hashmap 的扩容和树形化全面分析  # JDK8中的HashMap初始化和扩容机制详解  # HashMap每次扩容为什么是2倍  # 就会  # 加载  # 默认值  # 链表  # 是个  # 遍历  # 翻倍  # 希望能  # 更高  # 每次都  # 谢谢大家  # 更长  # 有一个  # 组中  # 情况下  # pre  # class  # brush  # static 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 活动邀请函制作网站有哪些,活动邀请函文案?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  网站建设整体流程解析,建站其实很容易!  Laravel怎么调用外部API_Laravel Http Client客户端使用  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  如何在腾讯云免费申请建站?  Laravel观察者模式如何使用_Laravel Model Observer配置  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何在阿里云域名上完成建站全流程?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何在服务器上三步完成建站并提升流量?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  如何在IIS中新建站点并配置端口与物理路径?  Python高阶函数应用_函数作为参数说明【指导】  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在阿里云部署织梦网站?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  三星网站视频制作教程下载,三星w23网页如何全屏?  LinuxCD持续部署教程_自动发布与回滚机制  ,网页ppt怎么弄成自己的ppt?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  JavaScript如何操作视频_媒体API怎么控制播放  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  🚀拖拽式CMS建站能否实现高效与个性化并存?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  中山网站推广排名,中山信息港登录入口?  Android使用GridView实现日历的简单功能  智能起名网站制作软件有哪些,制作logo的软件?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  高防服务器租用指南:配置选择与快速部署攻略  微信小程序 input输入框控件详解及实例(多种示例)  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  如何在Ubuntu系统下快速搭建WordPress个人网站?  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  高防服务器如何保障网站安全无虞?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境