众所周知,HashMap初始容量16,负载因子0.75,如果我们没有设置初始容量大小,随着元素的不断增加,HashMap会发生多次扩容,而HashMap中的扩容机制决定了每次扩容都需要重建hash表,是非常影响性能的。同样设置过大浪费内存,因此设置一个合适的初始容量是有必要的!

    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {Map<String, Object> map = new HashMap<>(8);for (int i = 0; i < 13; i++) {map.put(String.valueOf(i), i);}Class<?> mapType = map.getClass();Method capacity = mapType.getDeclaredMethod("capacity");capacity.setAccessible(true);System.out.println("capacity : " + capacity.invoke(map) + "    size : " + map.size());}

计算公式:initialCapacity = (需要存储的元素个数 / 负载因子) + 1

注意⚠️取最近的2的n次幂。

2   -> 4

12 -> 16

13 -> 32

HashMap初始容量指定规则相关推荐

  1. 到底什么是hash呢?hash碰撞?为什么HashMap的初始容量是16?

    一 ,到底什么是hash呢? 作者:知乎用户 链接:https://www.zhihu.com/question/26762707/answer/40119521 来源:知乎 著作权归作者所有.商业转 ...

  2. new HashMap(list.size())指定size就能完全避免扩容带来的额外开销了吗?

    public static void longLongAGo() {int count = 1000000;System.out.println("---------------- 不设置h ...

  3. 阿里巴巴Java开发手册建议设置HashMap的初始容量,但设置多少合适呢?

    作者 l Hollis 来源 l Hollis(ID:hollischuang) 集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定 ...

  4. 对HashMap数据结构的理解——加载因子和初始容量

    先看源码: 解释一下位移运算: 1<<4 是位移运算的表示,为十进制16 1的二进制表示:1 左移4位之后的二进制表示为B(10000) = D(16) 更简单的计算方法就是 1<& ...

  5. 为什么HashMap默认初始容量为2次幂?不是2次幂会怎样?讲讲 HashMap 扰动函数?

    关于HashMap的详解文章请移步: 链接: HashMap源码研究--源码一行一行的注释 文章目录 为什么初始容量是 2次幂? 如果指定了不是2的次幂的容量会发生什么? 有一个初始容量参数的构造方法 ...

  6. Java源码HashMap、ConcurrentHashMap:JDK1.8HashMap静态常量以及设置的目的,初始容量、最大容量、扩容缩容树化条件

    HashMap核心源码 作为工作中最重要.最常用的容器之一,当然还是要自己动手写一篇 HashMap 的源码解析来加深对其的印象咯,而且它的设计与实现 也有很多值得学习的地方. 以下包含HashMap ...

  7. Java集合篇:集合细节:为集合指定初始容量、asList的缺陷、subList的缺陷

    一.为集合指定初始容量: 集合是我们在Java编程中使用非常广泛的,它就像大海,海纳百川,像万能容器,盛装万物,而且这个大海,万能容器还可以无限变大(如果条件允许).当这个海.容器的量变得非常大的时候 ...

  8. 【226期】面试问我,HashMap 的默认初始容量是多少,我该怎么说?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...

  9. java容量_Java集合类初始容量、加载因子、扩容增量

    当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低. 加载因 ...

  10. Java中的ArrayList的初始容量和容量分配

    List接口的大小可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素. ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的 ...

最新文章

  1. python中的module
  2. 轻松获取LAMP,LNMP环境编译参数配置
  3. mciSendString用法
  4. Logback配置输出sql
  5. python的django框架与springboot_Python系统教学|为什么Django框架在Python开发很重要?...
  6. 《ASP.NET Core 微服务实战》-- 读书笔记(第5章)
  7. python中定制类_python定制类__str__(实例详解)
  8. C语言 函数指针 - C语言零基础入门教程
  9. Qt笔记-桌面应用程序加载字体库(ttf)
  10. 开课吧Java课堂:小应用程序基础是什么
  11. 【2018】面试复习大纲
  12. SpringBoot2.X 单元测试(Junit4.X) 基本配置
  13. 真实面试经历:十面阿里,七面头条,六个Offer
  14. 计算机操作系统笔记总结:Part1 计算机系统概述
  15. 安装Solidworks 2018出现可执行文件未成功安装的解决方法 PreReqs\VCRedist10\vcredist_x86.exe
  16. python3中26个英文字母排序_26个英文字母按排列顺序
  17. ectouch购物车添加勾选结算功能
  18. editor.md中markdown编辑器的实现
  19. [R语言]1. R语言中R包下载存储位置和安装位置
  20. java获取一定距离以内的经纬度值_java 根据经纬度计算两地间的距离

热门文章

  1. Microsoft Word 2007 向程序发送命令时出现问题解决方法
  2. Redis的incr命令引发的反序列化异常和ERR value is not an integer or out of range异常
  3. Linux下查看CPU、内存占用率
  4. 【办公】Gmail的常用方法以及小技巧
  5. PIXI入门-PIXI文档翻译(1)
  6. Python-Django毕业设计小斌美食网站(程序+LW)
  7. 基于.net5.0常用开源组件Xman
  8. 核子公式——量化IT团队绩效
  9. (vopt-7063) Failed to find ‘glbl‘ in hierarchical name 问题解决
  10. 操作系统4.1.8 文件保护