首页
学习
活动
专区
圈层
工具
发布

[Java 8 HashMap 详解系列]6.HashMap 的扩容 resize() 原理

6.HashMap 的扩容 resize() 原理

我们先来上一段测试代码,直观感受一下 HashMap 的真实的扩容过程:

代码语言:javascript
复制
package i

import java.util.*

/**
 * @author: Jack
 * 2020-03-21 21:55
 */
fun main(args: Array<String>) {
    val map = HashMap<String, Int>(2)
    val clz = map::class.java
    val capacity = clz.getDeclaredMethod("capacity")
    capacity.isAccessible = true
    val size = clz.getDeclaredMethod("size")
    size.isAccessible = true

    println("capacity=${capacity.invoke(map)}")
    println("size=${size.invoke(map)}")
    println(map)

    map["a"] = 1
    println("capacity=${capacity.invoke(map)}")
    println("size=${size.invoke(map)}")
    println(map)

    map["b"] = 2
    println("capacity=${capacity.invoke(map)}")
    println("size=${size.invoke(map)}")
    println(map)

    map["c"] = 3
    println("capacity=${capacity.invoke(map)}")
    println("size=${size.invoke(map)}")
    println(map)

    map["ab"] = 12
    println("capacity=${capacity.invoke(map)}")
    println("size=${size.invoke(map)}")
    println(map)

    map["bc"] = 23
    println("capacity=${capacity.invoke(map)}")
    println("size=${size.invoke(map)}")
    println(map)

    map["abc"] = 123
    println("capacity=${capacity.invoke(map)}")
    println("size=${size.invoke(map)}")
    println(map)

    map["abcd"] = 1234
    println("capacity=${capacity.invoke(map)}")
    println("size=${size.invoke(map)}")
    println(map)

}

输出:

代码语言:javascript
复制
capacity=2
size=0
{}
capacity=2
size=1
{a=1}
capacity=4
size=2
{a=1, b=2}
capacity=4
size=3
{a=1, b=2, c=3}
capacity=8
size=4
{a=1, ab=12, b=2, c=3}
capacity=8
size=5
{a=1, ab=12, bc=23, b=2, c=3}
capacity=8
size=6
{a=1, ab=12, bc=23, b=2, c=3, abc=123}
capacity=16
size=7
{a=1, ab=12, bc=23, b=2, c=3, abc=123, abcd=1234}

Kotlin 开发者社区

作者:一个会写诗的程序员

链接:https://cloud.tencent.com/developer/article/1603892

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

下一篇
举报
领券