手撕HashMap的resize()方法源码渗透解析+图解

    技术2022-07-12  76

    HashMap的resize()方法不过以下三个问题

    为什么要扩容?

    何时扩容?

    怎样扩容?

    第一个问题:为什么要扩容?

    这个问题答案可深可浅 散列表在不断的经过put()方法添加元素时 当指定长度的散列表达到扩容阈值 就要进行扩容的操作 如果不扩容 那么无法再往集合中添加元素 同时数据量达到一定程度还不扩容也会让HashMap的时间复杂的从O(1)-->O(n) 而扩容之后会让时间复杂度从O(n)-->O(logn) 所以说扩容是很有必要的 但是扩容同时也带来两个问题 何时扩容? 怎样扩容? 这两个问题进入代码来解析 一样的 看源码之前先看常量有哪些

    以下是resize的核心代码

    @SuppressWarnings({"rawtypes,"unchecked""})这个注解的作用是屏蔽一些无关紧要的警告

    以下这部分代码主要做的是链表上的数据移植–重新计算桶位位置

    图解一哈

    Processed: 0.013, SQL: 9