• HashMap中capacity、loadFactor、threshold、size等概念的解释<转>


    最近在看HashMap的源码,有很多概念都很模糊,今天写了一个测试例子,加深对这几个概念的理解,并演示了扩容及树化的过程(见下篇博文:)。 
    注:本文基于JDK 1.8 
    这里写图片描述

    HashMap的结构

    这里写图片描述

    约定

    约定前面的数组结构的每一个格格称为桶 
    约定桶后面存放的每一个数据称为bin 
    bin这个术语来自于JDK 1.8的HashMap注释。

    size

    size表示HashMap中存放KV的数量(为链表和树中的KV的总和)。

    capacity

    capacity译为容量。capacity就是指HashMap中桶的数量。默认值为16。一般第一次扩容时会扩容到64,之后好像是2倍。总之,容量都是2的幂。

        /**
         * The default initial capacity - MUST be a power of two.
         */
        static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
    • 1
    • 2
    • 3
    • 4

    loadFactor

    loadFactor译为装载因子。装载因子用来衡量HashMap满的程度。loadFactor的默认值为0.75f。计算HashMap的实时装载因子的方法为:size/capacity,而不是占用桶的数量去除以capacity。

        /**
         * The load factor used when none specified in constructor.
         */
        static final float DEFAULT_LOAD_FACTOR = 0.75f;
    • 1
    • 2
    • 3
    • 4

    threshold

    threshold表示当HashMap的size大于threshold时会执行resize操作。 
    threshold=capacity*loadFactor

        /**
         * The next size value at which to resize (capacity * load factor).
         */
        int threshold;
    • 1
    • 2
    • 3
    • 4

    结束语

    这篇博文讨论了HashMap的一些基本概念,如capacity、loadFactor、threshold、size等,下篇博文 HashMap的扩容及树化过程 根据示例,讨论下扩容和树化的过程。

    转自 https://blog.csdn.net/fan2012huan/article/details/51087722

  • 相关阅读:
    ES 入门记录之 match和term查询的区别
    ElasticSearch 学习记录之Text keyword 两种基本类型区别
    ES 记录之如何创建一个索引映射,以及一些设置
    娱乐至死 读书笔记
    ES 入门之一 安装ElasticSearcha
    王二的经济学故事 读书笔记
    redis特性 存储 API 集群 等
    Linux 卸载 openjdk
    Linux 下面解压.tar.gz 和.gz文件解压的方式
    本地连接 vmware服务器
  • 原文地址:https://www.cnblogs.com/winkey4986/p/9231253.html
Copyright © 2020-2023  润新知