返回顶部
首页 > 资讯 > 前端开发 > JavaScript >HashMap的负载因子初始值是0.75的原因是什么
  • 236
分享到

HashMap的负载因子初始值是0.75的原因是什么

2024-04-02 19:04:59 236人浏览 泡泡鱼
摘要

这篇文章主要讲解了“HashMap的负载因子初始值是0.75的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HashMap的负载因子初始值是0.7

这篇文章主要讲解了“HashMap的负载因子初始值是0.75的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HashMap的负载因子初始值是0.75的原因是什么”吧!

一、负载因子的作用

对于HashMap的研究,我之前一直停留在考虑源码是如何实现的,现在当我重新再来看的时候,才发现,系统默认的各种参数值,才是HashMap的精华所在。

负载因子是和扩容机制有关的,意思是如果当前容器的容量,达到了我们设定的最大值,就要开始执行扩容操作。举个例子来解释,避免小白听不懂:

比如说当前的容器容量是16,负载因子是0.75,16*0.75=12,也就是说,当容量达到了12的时候就会进行扩容操作。

他的作用很简单,相当于是一个扩容机制的阈值。当超过了这个阈值,就会触发扩容机制。HashMap源码已经为我们默认指定了负载因子是0.75。

public class HashMap<K,V> extends AbstractMap<K,V>     implements Map<K,V>, Cloneable, Serializable {     //略     static final float DEFAULT_LOAD_FACTOR = 0.75f;     //略     public HashMap(int initialCapacity, float loadFactor) {         if (initialCapacity < 0)             throw new IllegalArgumentException("Illegal initial capacity: " +                                                initialCapacity);         if (initialCapacity > MAXIMUM_CAPACITY)             initialCapacity = MAXIMUM_CAPACITY;         if (loadFactor <= 0 || Float.isNaN(loadFactor))             throw new IllegalArgumentException("Illegal load factor: " +                                                loadFactor);         this.loadFactor = loadFactor;         this.threshold = tableSizeFor(initialCapacity);     }     //略 }

我截取了部分源码,从这里可以看出,系统默认的负载因子值就是0.75,而且我们还可以在构造方法中去指定。下面我们就正式来分析一下为什么是默认的0.75。

二、原因解释(重点)

我们在考虑HashMap的时候,首先要想到的是HashMap只是一个数据结构,既然是数据结构最主要的就是节省时间和空间。负载因子的作用肯定也是节省时间和空间。为什么节省呢?我们考虑两种极端情况。

1、负载因子是1.0

我们先看HashMap的底层数据结构

HashMap的负载因子初始值是0.75的原因是什么

我们的数据一开始是保存在数组里面的,当发生了Hash碰撞的时候,就是在这个数据节点上,生出一个链表,当链表长度达到一定长度的时候,就会把链表转化为红黑树。

当负载因子是1.0的时候,也就意味着,只有当数组的8个值(这个图表示了8个)全部填充了,才会发生扩容。这就带来了很大的问题,因为Hash冲突时避免不了的。当负载因子是1.0的时候,意味着会出现大量的Hash的冲突,底层的红黑树变得异常复杂。对于查询效率极其不利。这种情况就是牺牲了时间来保证空间的利用率。

因此一句话总结就是负载因子过大,虽然空间利用率上去了,但是时间效率降低了。

2、负载因子是0.5

负载因子是0.5的时候,这也就意味着,当数组中的元素达到了一半就开始扩容,既然填充的元素少了,Hash冲突也会减少,那么底层的链表长度或者是红黑树的高度就会降低。查询效率就会增加。

但是,兄弟们,这时候空间利用率就会大大的降低,原本存储1M的数据,现在就意味着需要2M的空间。

一句话总结就是负载因子太小,虽然时间效率提升了,但是空间利用率降低了。

3、负载因子0.75

经过前面的分析,基本上为什么是0.75的答案也就出来了,这是时间和空间的权衡。当然这个答案不是我自己想出来的。答案就在源码上,我们可以看看:

大致意思就是说负载因子是0.75的时候,空间利用率比较高,而且避免了相当多的Hash冲突,使得底层的链表或者是红黑树的高度比较低,提升了空间效率。

感谢各位的阅读,以上就是“HashMap的负载因子初始值是0.75的原因是什么”的内容了,经过本文的学习后,相信大家对HashMap的负载因子初始值是0.75的原因是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: HashMap的负载因子初始值是0.75的原因是什么

本文链接: https://lsjlt.com/news/83396.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • HashMap的负载因子初始值是0.75的原因是什么
    这篇文章主要讲解了“HashMap的负载因子初始值是0.75的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HashMap的负载因子初始值是0.7...
    99+
    2024-04-02
  • HashMap加载因子为什么是0.75
    本篇内容主要讲解“HashMap加载因子为什么是0.75”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HashMap加载因子为什么是0.75”吧!加载因子是哈希表在其容量自动增加之前可以达到多满...
    99+
    2023-06-16
  • 初始化css的原因是什么
    今天小编给大家分享一下初始化css的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2024-04-02
  • CPU使用率低高负载的原因是什么
    CPU使用率低高负载的原因是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原因总结产生的原因一句话总结就是:等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运...
    99+
    2023-06-19
  • hashmap初始化直接赋值的方法是什么
    在Java中,可以使用如下方法直接初始化一个HashMap并赋值: Map<String, Integer> map =...
    99+
    2024-03-11
    hashmap
  • 云服务器初始化失败原因是什么
    网络连接问题 在云服务器的初始化过程中,网络连接可能会成为一个重要的问题。如果网络连接不稳定或者出现问题,就会导致云服务器初始化失败。在这种情况下,我们可以采取以下措施来解决网络连接问题: (1)检查网络环境 确保云服务器所使用的网络...
    99+
    2023-10-28
    初始化 原因 服务器
  • mysql初始化失败的原因及解决方法是什么
    MySQL初始化失败的原因可能有很多,常见的原因包括:1. 配置文件错误:MySQL的配置文件(my.cnf)中可能存在错误配置,比...
    99+
    2023-09-23
    mysql
  • windows7通讯端口初始化失败是什么原因
    windows7用户在开启通讯软件的时候出现了通讯端口初始化失败的现象,这种情况是什么原因导致的呢?应当怎么办呢?之所以会有通讯端口初始化失败很有可能是大家不小心删除了注册表中的部分数据,你可以通过命令提示符窗口来解决,开启窗口以后输入ne...
    99+
    2023-07-19
  • linux要挂载的原因是什么
    这篇文章主要介绍“linux要挂载的原因是什么”,在日常操作中,相信很多人在linux要挂载的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux要挂载的原因是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • Java中ArrayList初始化容量大小为10的原因是什么
    这篇文章主要讲解了“Java中ArrayList初始化容量大小为10的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中ArrayList初始化容量大小为10的原因是什么”吧...
    99+
    2023-07-02
  • 阿里云服务器初始化失败原因是什么
    1. 简介 阿里云服务器是一款强大的云计算服务,为用户提供高性能、高可靠性、高安全性的云服务器。然而,在使用阿里云服务器时,有时候会出现初始化失败的情况。那么,阿里云服务器初始化失败的原因是什么呢?本文将为您解答。2. 原因分析2.1 网络...
    99+
    2023-12-29
    阿里 初始化 原因
  • linux光驱要挂载的原因是什么
    本篇内容主要讲解“linux光驱要挂载的原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux光驱要挂载的原因是什么”吧!因为linux系统将所有的硬件设备都当做文件来处理,所以当使...
    99+
    2023-06-30
  • Cassandra的复制因子是什么
    在 Cassandra 中,复制因子(replication factor)是指指定在集群中复制数据副本的数量。复制因子决定了每个数...
    99+
    2024-04-09
    Cassandra
  • 什么是Cassandra的复制因子
    Cassandra的复制因子是指在Cassandra集群中每个数据副本的数量。复制因子的值决定了数据在集群中的复制数量,从而影响数据...
    99+
    2024-04-09
    Cassandra
  • steam充值页面加载不出来是什么原因
    steam充值页面加载不出来原因有:1、网络连接不稳定导致Steam充值页面无法加载;2、浏览器缓存导致页面加载错误;3、防火墙或安全软件阻止Steam充值页面的加载;4、一些地区可能会限制对Steam充值页面的访问。本教程操作环境:win...
    99+
    2023-07-10
  • php $_cookie值与存入值不同的原因是什么
    今天小编给大家分享一下php $_cookie值与存入值不同的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。变量名...
    99+
    2023-07-05
  • runtime error的原因是什么
    这篇文章主要介绍“runtime error的原因是什么”,在日常操作中,相信很多人在runtime error的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”runtime error的原因是什么...
    99+
    2023-06-20
  • win11卡的原因是什么
    这篇文章主要介绍“win11卡的原因是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win11卡的原因是什么”文章能帮助大家解决问题。一、安装适配如果系统刚刚装好,可能需要一段时间适应配置。一般...
    99+
    2023-07-02
  • ecshop慢的原因是什么
    ecshop慢的原因:1、服务器配置不当,ecshop的速度和性能受到服务器配置的影响;2、数据库优化不足,数据库是ECShop的核心组件,存储和处理所有商品信息、订单数据等;3、图片和静态资源过多或过大,如果网页中包含大量图片或其他静态资...
    99+
    2023-07-13
  • hashmap查询时间复杂度为O(1)的原因是什么
    本篇内容介绍了“hashmap查询时间复杂度为O(1)的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!hashmap为什么查询时间...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作