<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java-Map on 计算机知识分享网</title><link>https://jiaochengziyuan.cn/categories/java-map/</link><description>Recent content in Java-Map on 计算机知识分享网</description><generator>Hugo</generator><language>zh-CN</language><managingEditor>986945193@qq.com (David)</managingEditor><webMaster>986945193@qq.com (David)</webMaster><copyright>Copyright © 2014-至今, David.</copyright><lastBuildDate>Mon, 26 Dec 2022 10:26:22 +0800</lastBuildDate><follow_challenge><feedId>00000000000000000</feedId><userId>00000000000000000</userId></follow_challenge><atom:link href="https://jiaochengziyuan.cn/categories/java-map/index.xml" rel="self" type="application/rss+xml"/><item><title>【java-map】java中HashMap的初始容量如何设置</title><link>https://jiaochengziyuan.cn/p/java-mapjava%E4%B8%ADhashmap%E7%9A%84%E5%88%9D%E5%A7%8B%E5%AE%B9%E9%87%8F%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE/</link><pubDate>Mon, 26 Dec 2022 10:26:22 +0800</pubDate><author>986945193@qq.com (David)</author><guid>https://jiaochengziyuan.cn/p/java-mapjava%E4%B8%ADhashmap%E7%9A%84%E5%88%9D%E5%A7%8B%E5%AE%B9%E9%87%8F%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE/</guid><description>&lt;p&gt;根据阿里巴巴&lt;code&gt;Java&lt;/code&gt;开发手册上建议&lt;code&gt;HashMap&lt;/code&gt;初始化时设置已知的大小，如果不超过16个，那么设置成默认大小16：&lt;/p&gt;&#10;&lt;p&gt;集合初始化时， 指定集合初始值大小。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;说明：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;HashMap&lt;/code&gt;使用&lt;code&gt;HashMap(int initialCapacity)&lt;/code&gt;初始化&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;正例：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;initialCapacity = (需要存储的元素个数 / 负载因子) + 1。&lt;/p&gt;&#10;&lt;p&gt;注意负载因子（即loader factor）默认为0.75，&lt;/p&gt;&#10;&lt;p&gt;如果暂时无法确定初始值大小，请设置为16（即默认值）。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;反例：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;HashMap需要放置1024个元素，由于没有设置容量初始大小，随着元素不断增加，容量7次被迫扩大，resize需要重建hash表，严重影响性能。&lt;/p&gt;&#10;&lt;p&gt;而对于为什么负载因子是0.75，答案可以在《数据结构与算法分析 Java语言描述》的散列章节中找到&lt;/p&gt;&#10;&lt;p&gt;Java HashMap的指定初始值大小和自动扩容&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="hashmap指定初始值大小"&gt;HashMap指定初始值大小&lt;/h3&gt;&#10;&lt;p&gt;指定初始值大小应为2的幂。&lt;/p&gt;&#10;&lt;p&gt;如果指定的初始值不是2的幂，则HashMap的容量为大于指定初始值的2的幂；如果不指定，容量默认为16。&lt;/p&gt;&#10;&lt;h3 id="hashmap自动扩容"&gt;HashMap自动扩容&lt;/h3&gt;&#10;&lt;p&gt;当HashMap的键值对个数大于容量的75%时，HashMap的容量扩大一倍。&lt;/p&gt;&#10;</description></item></channel></rss>