首页 > 其他分享 >HashMap 的初始值和最大值和扩容因子

HashMap 的初始值和最大值和扩容因子

时间:2022-12-01 02:00:15浏览次数:51  
标签:扩容 初始化 CAPACITY HashMap 最大值 初始值 因子

HashMap 初始化默认值

HashMap 的初始化默认值是 16。

当然你也可以在 HashMap 构造的时候传入初始化的值。

HashMap 的最大值

HashMap 最大值是1 << 30。
<< 这个是 Java 使用的移位操作符,运行的结果为 2^30,这个在源码的注释中已经明确说明。

首先必须理解操作符 <<,它是左移操作符,表示对二进制进行左移。通常情况下,1 << x 等于 2^x

如上面标记的代码表明,如果要存的元素数目大于 MAXIMUM_CAPACITY,HashMap方法还把 数组大小capacity 强制设置成 MAXIMUM_CAPACITY

综上所述,HashMap限制数组大小最大值有两个地方,其一就是初始化时调用 tableSizeFor()函数,它会将容量置为 2的幂次,并保证不超过MAXIMUM_CAPACITY。

其二就是调用扩容函数 resize()进行容量翻倍时。如果容量达到MAXIMUM_CAPACITY时允许再扩容,新数组的容量就是 1 << 31,这会造成整型溢出,故Integer.MAX_VALUE 是 HashMap 的最终容量。

HashMap 扩容因子

所谓的加载因子,也叫扩容因子或者负载因子,它是用来进行扩容判断的 。

假设加载因子是0.5, HashMap 初始化容量是16,当 HashMap 中有 16 * 0.5=8 个元素时, HashMap 就会进行扩容操作。

而 HashMap 中加载因子为0.75,是考虑到了性能和容量的平衡。

 

2022-11-30_12-48-04

 

上面的代码是 JDK 源代码中定义的参数,上面这 3 个参数定义了 Java 使用 HashMap 时候的基础。

 

https://www.ossez.com/t/hashmap/14224

标签:扩容,初始化,CAPACITY,HashMap,最大值,初始值,因子
From: https://www.cnblogs.com/huyuchengus/p/16940287.html

相关文章

  • 如何使用 LinkedHashMap 实现 LRU 缓存?
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。大家好,我是小彭。在上一篇文章里,我们聊到了HashMap的实现原理和源码分析,在源码分析的过程中......
  • hashmap 的重新散列和装载因子
    HashMap的装载因子是0.75,用人话说就是当HashMap的容量达到定义容量的75%的时候,HashMap会进行扩容,当HashMap进行扩容的时候就会重新散列(rehashing)。经过考古,可以......
  • Map 接口实现类的特点! 使用实现类HashMap
         ......
  • HashMap为何线程不安全?HashMap,HashTable,ConcurrentHashMap对比
    这两天写爬虫帮组里收集网上数据做训练,需要进一步对收集到的json数据做数据清洗,结果就用到了多线程下的哈希表数据结构,猛地回想起自己看《Java并发编程的艺术》框架篇的时......
  • HashMap线程安全面试题(含答案)
    HashMap线程安全面试题(含答案)HashMap线程安全面试题(含答案)Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的。看下面两个场景:1、当用在方法内的局部变量时,局部......
  • HashMap源码分析(一)
    之前有写到ArrayList的源码分析,欢迎大家点开我的头像查看对于HashMap这个类大家一定不陌生,想必多多少少用过或者了解过,今天我来和大家谈谈HashMap的源码,JDK为1.8继承Abs......
  • 给定N(N<=100)个正整数,查找其中的最大值并输出。
    #include<stdio.h>#defineN100main(){ inta[N],n,i,max; printf("请输入N个数(N<=100):\n"); scanf("%d",&n);//输入的个数  for(i=0;i<n;i++) scanf("%d",&a[i......
  • 【JAVA】Map之HashMap
    Map是一种键-值对(key-value)集合HashMap是一个散列表,它存储的内容是键值对(key-value)映射Map是一个接口,HashMap是一个Map的实现类(HashMap继承了AbstractMap类,实现了Ma......
  • hashmap底层原理
    1HashMap的内部数据结构数组+链表/红黑树 2HashMap允许空键空值么HashMap最多只允许一个键为Null(多条会覆盖),但允许多个值为Null 3影响HashMap性能的重要参......
  • HashMap实现原理和自动扩容
    HashMap实现原理:JDK1.7:数组+单向链表(头插)在并发情况下头插可能出现循环链表(死循环)问题。原因:因为头插,在新数组中链表的元素顺序发生了变化,  如上图,假设线程1在扩......