当前位置: 首页 > news >正文

Hashtable中的rehash()方法

protected void rehash() {
        int oldCapacity = table.length;
        Entry<?,?>[] oldMap = table;

        // overflow-conscious code
        int newCapacity = (oldCapacity << 1) + 1;//扩容策略:原容量扩大两倍+1
        if (newCapacity - MAX_ARRAY_SIZE > 0) {	//新容量大于最大容量
            if (oldCapacity == MAX_ARRAY_SIZE)//如果原容量等于最大容量直接返回
                // Keep running with MAX_ARRAY_SIZE buckets
                return;
            newCapacity = MAX_ARRAY_SIZE;//否则把最大容量赋值给新容量
        }
        Entry<?,?>[] newMap = new Entry<?,?>[newCapacity];

        modCount++;
        threshold = (int)Math.min(newCapacity * loadFactor, MAX_ARRAY_SIZE + 1);//当原容量等于最大容量时,返回后一个值,否则返回前一个值
        table = newMap;

        for (int i = oldCapacity ; i-- > 0 ;) {//遍历数组
            for (Entry<K,V> old = (Entry<K,V>)oldMap[i] ; old != null ; ) {//遍历链表
                Entry<K,V> e = old;
                old = old.next;

                int index = (e.hash & 0x7FFFFFFF) % newCapacity;//计算节点保存的位置
                e.next = (Entry<K,V>)newMap[index];//把newMap[index]上的节点挂在e节点后面
                newMap[index] = e;//newMap[index]指向e节点
                //其实就是往头部插入节点
              by IT_Datouer
				/**
				 * @author	by IT_datouer
				 */
            }
        }
    }

相关文章:

  • mysql查询一个时间段的数据
  • Linux中的shell是什么
  • JUC笔记
  • 共享模型之管程
  • 共享模型之内存
  • 共享模型之无锁
  • 全面解析ThreadLocal
  • BIO-NIO-AIO笔记
  • docker 运行出错 Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/007
  • JAVA多态
  • 状态压缩DP--------蒙德里安的梦想
  • 区间DP————石子合并
  • C/C++无穷大的表示 0x7fffffff + 0x7fffffff= 负数
  • 李永乐(一)行列式计算——笔记
  • 李永乐(二)矩阵的概念及运算——笔记
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Angular2开发踩坑系列-生产环境编译
  • CAP 一致性协议及应用解析
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • OSS Web直传 (文件图片)
  • PHP面试之三:MySQL数据库
  • Redash本地开发环境搭建
  • Spring核心 Bean的高级装配
  • VuePress 静态网站生成
  • Vue全家桶实现一个Web App
  • vue数据传递--我有特殊的实现技巧
  • 阿里云购买磁盘后挂载
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 观察者模式实现非直接耦合
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 数组的操作
  • 线上 python http server profile 实践
  • 延迟脚本的方式
  • 整理一些计算机基础知识!
  • #if #elif #endif
  • (02)vite环境变量配置
  • (07)Hive——窗口函数详解
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (floyd+补集) poj 3275
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (二十三)Flask之高频面试点
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (十一)c52学习之旅-动态数码管
  • (转)nsfocus-绿盟科技笔试题目
  • (转)程序员疫苗:代码注入
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划