美文网首页
深入理解HashMap扩容

深入理解HashMap扩容

作者: 菜鸟程序员一枚 | 来源:发表于2019-01-30 11:55 被阅读8次

看过HashMap源码的人(大神请忽略)可能会有些疑问,HashMap究竟什么时候扩容?扩容的条件是什么?好的,接下啦我给大家介绍一下HashMap扩容相关的一些参数。

static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//默认的桶数组大小
static final int MAXIMUM_CAPACITY = 1 << 30;//极限值(超过这个值就将threshold修改为Integer.MAX_VALUE(此时桶大小已经是2的31次方了),表明不进行扩容了)
static final float DEFAULT_LOAD_FACTOR = 0.75f;//负载因子(请阅读下面体会这个值的用处)

容量(capacity):HashMap中数组的长度
加载因子(Load factor):HashMap在其容量自动增加前可达到多满的一种尺度,默认加载因子 = 0.75
扩容阈值(threshold):当哈希表的大小 ≥ 扩容阈值时,就会扩容哈希表
下面再用通俗一点的话说明一下
我们都知道HashMap的初始值是16(1,<<4),负载因子0.75(听说这个值是经过大量实践算出来的,这个值设定最合理),初始值16指的是数组的长度(1<<4是2的4次方,这样写计算机执行更快),当数组的容量达到12(16*0.75)时,这时开始扩容,扩容为32(1<<5即2的5次方),每次扩容按照2的倍数递增,扩容是为了减少hash碰撞,让链表的数据更少(最好链表上就一个数据,即为数组的下标数据)

相关文章

  • 深入理解HashMap扩容

    看过HashMap源码的人(大神请忽略)可能会有些疑问,HashMap究竟什么时候扩容?扩容的条件是什么?好的,接...

  • 深入源码理解JDK1.7版本HashMap的扩容机制

    深入源码理解JDK1.7版本HashMap的扩容机制 1.什么时候扩容:扩容必须同时满足两个条件: 1、 存放新值...

  • 2020-04-03 Java HashMap的实现原理的文章

    HashMap的扩容机制---resize() HashMap底层实现原理 扩容机制 Java中HashMap的实现原理

  • HashMap原理

    本文参考: HashMap的扩容机制---resize()HashMap的扩容及树化过程 HashMap的内部是使...

  • Java-HashMap 精讲原理篇

    本文涉及HashMap的: HashMap的简单使用 HashMap的存储结构原理 HashMap的扩容方法原理 ...

  • Java集合-HashSet源码实现分析

    概要 阅读本文前,请先阅读笔者写的文章:Java集合-HashMap源码实现深入解析理解了HashMap,再来理解...

  • 面试知识点

    HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。 HaspMap扩容是怎样扩容的,为什么...

  • 阿里盒马提前批java后端(一面)

    ArrayList和LinkedList的区别 HashMap底层实现 HashMap怎么实现扩容的 ...

  • HashMap深入理解

    HashMap也是我们使用非常多的集合,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。在H...

  • 深入理解HashMap

    深入理解HashMap 什么是HashMap HashMap作为Java语言中一种重要的类型,其存储数据通过键值对...

网友评论

      本文标题:深入理解HashMap扩容

      本文链接:https://www.haomeiwen.com/subject/ojbqsqtx.html