hashmap的resize函数,用于对hashmap初始化或者扩容。

首先看一下该函数的注释,如下图。从注释中可以看到,该函数的作用是初始化或者使table的size翻倍。如果table是null,那么就申请空间进行初始化。否则,因为我们在使用2的指数的扩张,在原来table的每个位置的元素,在新的table中,他们要么待在原来的位置,要么移动2的指数的偏移。从这里可以看出,扩容前table每个位置上如果有多个元素,元素之间组成链表时,在扩容后,该链表中的元素,有一部分会待在原地,剩下的元素会往后移动2的指数的偏移。

/**

* initializes or doubles table size. if null, allocates in

* accord with initial capacity target held in field threshold.

* otherwise, because we are using power-of-two expansion, the

* elements from each bin must either stay at same index, or move

* with a power of two offset in the new table.

* @return the table

**/

接下来看一下resize的代码,如下

final node[] resize() {

node[] oldtab = table;

int oldcap = (oldtab == null) ? 0 : oldtab.length;

java的resize函数_Java源码解析HashMap的resize函数相关推荐

  1. java map 变量_Java源码解析HashMap成员变量

    本文基于jdk1.8进行分析 首先看一下HashMap的一些静态常量.第一个是DEFAULT_INITIAL_CAPACITY,默认初始大小,16.从注释中可以了解到,大小必须为2的指数.这里的16, ...

  2. 《Java修炼指南:高频源码解析》阅读笔记一Java数据结构的实现集合类

    一.Arrays工具类 来自java.util.Arrays,用来处理数组的各种方法. 1.1 List asList(T- a) 用来返回由自定数组支持的固定大小列表,虽然这里返回了一个List,但 ...

  3. 死磕 java同步系列之ReentrantReadWriteLock源码解析

    问题 (1)读写锁是什么? (2)读写锁具有哪些特性? (3)ReentrantReadWriteLock是怎么实现读写锁的? (4)如何使用ReentrantReadWriteLock实现高效安全的 ...

  4. 【Java学习002】Java-ArrayList源码解析

    ArrayList源码解析 1.1底层数据结构 定义:实现List接口的可扩容数组实现. 数组特点: 查询快:数组开辟的是连续空间,所以可以依靠索引进行快速查询. 增删慢:每次删除元素,都需要更改数组 ...

  5. Java并发编程之FutureTask源码解析

    上次总结一下AQS的一些相关知识,这次总结了一下FutureTask的东西,相对于AQS来说简单好多呀 之前提到过一个LockSupport的工具类,也了解一下这个工具类的用法,这里也巩固一下吧 /* ...

  6. 深读源码-java同步系列之StampedLock源码解析

    问题 (1)StampedLock是什么? (2)StampedLock具有什么特性? (3)StampedLock是否支持可重入? (4)StampedLock与ReentrantReadWrite ...

  7. java lock可重入_Java源码解析之可重入锁ReentrantLock

    本文基于jdk1.8进行分析. ReentrantLock是一个可重入锁,在ConcurrentHashMap中使用了ReentrantLock. 首先看一下源码中对ReentrantLock的介绍. ...

  8. callback函数_Nodejs 源码解析 util.promisify 如何将 Callback 转为 Promise

    Nodejs util 模块提供了很多工具函数.为了解决回调地狱问题,Nodejs v8.0.0 提供了 promisify 方法可以将 Callback 转为 Promise 对象. 工作中对于一些 ...

  9. underscoreJs中pluck函数的源码解析

    9月份之后项目开始进入收尾期了,产品要上市,所以9月之后的两个月都在疯狂的改BUG.最近总算是基本结束了,只剩下扫尾的了.终于能静下心来好好研究技术了.最近遇到两个函数,分别是underscore中的 ...

最新文章

  1. 01-mybatis源码阅读
  2. 科技/IT:2019 年 Q3 表现最佳和最差的企业
  3. 将一种文本类型安全的转化为另一种类型
  4. Pro ASP.NET MVC –第五章 使用Razor
  5. mysql在mac下的data目录_Mysql在mac中目录结构用法命令
  6. xmlstreamexception 参数实体未进行声明_命名实体识别研究进展概述
  7. 【黑马程序员 C++教程从0到1入门编程】【笔记6】C++核心编程(文件操作)
  8. pytagcloud支持中文(汉仪全唐诗体简)
  9. Asp.net MVC3.0 基于不同的角色显示不同的菜单
  10. 接收并解析消息体传参、解析 json 参数
  11. Delete带有子查询的sql优化,改为innerJoin解决
  12. sql limit 子句_SQL按子句概述和示例
  13. 从AssetBundle中获取图片,给Image 组件替换Sprite
  14. 海康威视多摄像头视频实时采集——OpenCV显示
  15. 使用NoteExpress/Citespace/VOSviewer/EndNote进行CNKI文献计量分析
  16. 文章瞎读 TOLDI: An effective and robust approach for 3D local shape description 2016
  17. 2022年全国最新消防设施操作员模拟试题题库及答案
  18. 面包师问题--进程同步问题
  19. 【LSTM回归预测】基于灰狼算法优化长短时记忆GWO-LSTM时序时间序列数据预测(含前后对比)附Matlab代码
  20. 店盈通:拼多多要怎么做才可以快速获取自然流量?

热门文章

  1. Java项目:基于SSM的婚纱影楼管理系统(计算机毕业设计)
  2. 2022最新独立版智狐聚合支付v1.0.5.21_聚合支付系统源码
  3. 再生龙盘对盘拷贝Linux
  4. 「小白学Python」Windows安装Python
  5. 算法导论课后题和思考题 第3章
  6. 瓶子机器人diy制作大全_塑料瓶回收改造成电动机器人玩具
  7. Ubuntu_apt-update_Certificate-verification-failed
  8. Win7 下安装 Visual Studio 2008 失败的解决办法
  9. 如何选择统计检验方法
  10. python int() round() floor()函数的比较