您的位置:首页 > 编程语言 > Java开发

HashMap中capacity、loadFactor、threshold、size等概念的解释

2016-04-07 18:14 465 查看
最近在看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


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;


threshold

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

threshold=capacity*loadFactor

/**
* The next size value at which to resize (capacity * load factor).
*/
int threshold;


结束语

这篇博文讨论了HashMap的一些基本概念,如capacity、loadFactor、threshold、size等,下篇博文 HashMap的扩容及树化过程 根据示例,讨论下扩容和树化的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息