hashmap的常见静态属性和方法

2023-10-27

1.hashmap的常见的静态属性

// hashmap默认的容器大小(16)
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;

// hashmap默认最大的容器大小,超过不再扩容
static final int MAXIMUM_CAPACITY = 1 << 30;

// hashmap默认的负载因子(0.75)
static final float DEFAULT_LOAD_FACTOR = 0.75f;

// hashmap默认的链表结点树化的个数(8),包含8
static final int TREEIFY_THRESHOLD = 8;

// hashmap默认的树转链表的结点个数(6),包含6
static final int UNTREEIFY_THRESHOLD = 6;

// hashmap默认链表树化的数组大小(64),包含64
static final int MIN_TREEIFY_CAPACITY = 64;

2.hashmap常见的静态方法

// 获取节点的hash值,算法是key的hash值和该值右移16位作异或运算,能够更好的均匀散列在数组上
// 明确一点位运算的速度大于其他的运算速度
 static final int hash(Object key) {
     int h;
     // 从此处可以看到当key为null时,元素会被插入到数据下标为0的位置
     return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
 }
/*
 1147483647 
0100-0100 0110-0101 0011-0101 1111-1111    原值
0000-0000 0000-0000 0100-0100 0110-0101    左移16后
0100-0100 0110-0101 0111-0001 1001-1010    异或运算的值

0100-0100 0110-0101 0011-0101 1111-1111    原值
0000-0000 0000-0000 0100-0100 0110-0101    左移16后
0000-0000 0000-0000 0000-0101 0110-0101   与运算结果

0100-0100 0110-0101 0011-0101 1111-1111    原值
0000-0000 0000-0000 0100-0100 0110-0101    左移16后
0100-0100 0110-0101 0111-0101 1111-1111    或运算结果

特点:
异或运算高16不变,低16位保留了原高16位和原低16位的值
与运算高16丢失了,低16为偏向于0
或运算高16不变,低16位偏向于1
*/
// 当指定一个容器大小时,确保容器大小是2的倍数
 static final int tableSizeFor(int cap) {
     int n = cap - 1;
     n |= n >>> 1; 
     n |= n >>> 2;
     n |= n >>> 4;
     n |= n >>> 8;
     n |= n >>> 16;  // 如果是58,走完此步后会变成63
     return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
 }
 /*
 实现过程如下:
给定的值是58
0000-0000 0000-0000 0000-0000 0011-1001   n = cap - 1

0000-0000 0000-0000 0000-0000 0011-1001   n
0000-0000 0000-0000 0000-0000 0001-1100   n>>>1
0000-0000 0000-0000 0000-0000 0011-1101   n |= n >>> 1

0000-0000 0000-0000 0000-0000 0011-1101   n
0000-0000 0000-0000 0000-0000 0000-1111   n>>>2
0000-0000 0000-0000 0000-0000 0011-1111   n |= n >>> 2

0000-0000 0000-0000 0000-0000 0011-1111  n
0000-0000 0000-0000 0000-0000 0000-0011  n>>>4
0000-0000 0000-0000 0000-0000 0011-1111  n |= n >>> 4

0000-0000 0000-0000 0000-0000 0011-1111  n
0000-0000 0000-0000 0000-0000 0000-0000  n>>>8
0000-0000 0000-0000 0000-0000 0011-1111  n |= n >>> 8

0000-0000 0000-0000 0000-0000 0011-1111  n
0000-0000 0000-0000 0000-0000 0000-0000  n>>>16
0000-0000 0000-0000 0000-0000 0011-1111  n |= n >>> 16

最终的n的值为 63

*/

3.其他关于hashmap的分析

hashmap的扩容机制
hashmap链表转化成红黑树的过程以及红黑树转化成链表的过程
hashmap的存放元素的实现过程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hashmap的常见静态属性和方法 的相关文章

  • 禁用 Eclipse Java 调试器的热代码替换 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Eclipse 中禁用热代码替换 https stackoverflow com questions 2594408 how do i disable hot code replace in
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 如何在spring mvc中从控制器名称+操作名称获取映射的URL?

    是否有现有的解决方案可以从 Spring MVC3 中的 控制器名称 操作名称 获取映射的 URL 例如 asp net mvc 或 Rails 中的 UrlHelper 我觉得非常有用 thx 也许 你想要这样的东西 in your Co
  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 隐式超级构造函数 Person() 未定义。必须显式调用另一个构造函数?

    我正在开发一个项目 但收到错误 隐式超级构造函数 Person 未定义 必须显式调用另一个构造函数 我不太明白它 这是我的人物课程 public class Person public Person String name double D
  • Java 数组的最大维数

    出于好奇 在 Java 中数组可以有多少维 爪哇language不限制维数 但是JavaVM规范将维度数限制为 255 例如 以下代码将无法编译 class Main public static void main String args
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett

随机推荐

  • 前端面试问答题(1)

    1 页面从输入URL到页面加载显示完成 这个过程中都发生了什么 1 输入域名地址 2 发送至DNS服务器并获得域名对应的WEB服务器IP地址 3 与WEB服务器建立TCP连接 4 服务器的永久重定向响应 从 http example com
  • Java 代理模式详解

    前言 在软件设计过程中 我们经常需要对对象或系统进行扩展 但是在开发过程中 直接修改现有代码可能会带来一些风险和不良影响 比如破坏原有的稳定性 影响已有的功能等 而代理模式则是通过引入一个代理对象来间接访问目标对象 从而为应用程序提供额外的
  • linux入门基础

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 一 虚拟机的管理 概念 虚拟机 Virtual Machine 指通过软件模拟的
  • MySQL分片高可用集群之Cobar部署使用

    MySQL分片高可用集群之Cobar部署使用 2015 10 22 14 58 47 标签 mysql 高可用 分片 cobar 分库 原创作品 允许转载 转载时请务必以超链接形式标明文章 原始出处 作者信息和本声明 否则将追究法律责任 h
  • Chatgpt4来了,测试小姐姐实测,在失业的边缘疯狂试探~

    GPT 4是OpenAI于2023年3月发布的最新人工智能模型 它是继GPT 3 5之后的又一次重大突破 它的核心技术是基于Transformer的自回归语言模型 它使用了大量的无标注数据进行预训练 学习了自然语言和其他模态之间的通用表示和
  • 关于传递函数的频率响应和低通滤波器

    关于传递函数的频率响应和低通滤波器 参考资料 动态系统的建模与分析 9 一阶系统的频率响应 低通滤波器 Matlab Simulink分析 哔哩哔哩 bilibili 以前关于这部分只是知道了而已 并没有用MATLAB认真试验过 这里借着D
  • moxa Nport配置tcp/udp实现数据发送和回传(补充数据接收错乱处理方法)

    moxa Nport配置tcp udp实现数据发送和回传 记一次吐血经历 目的 现有一内网环境需要连外网进行钉钉推送 开始使用串口连接实体电脑的方式实现 现需要撤除实体电脑 故选用串口服务器的方式实现 型号是moxa NPort5150 网
  • snipaste截图软件滚动截图_Windows截图:snipaste & QQ截图工具

    介绍Windows端两款便利的截图工具 snipaste 和 QQ截图工具 我在使用snipaste的时候 最常用的是三个功能 截图 截图并自动复制到剪切板 贴图 使用QQ截图工具 须后台运行QQ 的时候 最常用的是 OCR文本识别 标注
  • 1.4 CNN的崛起

    目录 四 CNN的崛起 4 1 SVM vs NN 4 2 ILSVRC 4 2 1 分类任务描述 4 2 2 SVM 的覆灭 4 3 CNN 的发展 四 CNN的崛起 4 1 SVM vs NN 虽然反向传播算法的提出 使得神经网络的学习
  • python内点法_最优化问题(三) 之 外点法(罚函数法)

    1 基本概念 罚函数法又称乘子法 是将约束优化问题转换为无约束最优化问题的方法之一 其基本思想就是通过在原始的目标函数中添加一个障碍函数 也可以理解成惩罚函数 来代替约束条件中的不等式约束 如果当前解不满足约束条件 就在目标项上加上一个正向
  • Web前端——CSS复习(3.27-3.31)

    1 渐变 1 什么是渐变 渐变 指的是两种或多种颜色之间的平滑过渡 aa 渐变可指定多个中间颜色值 色标 bb 渐变可以用在任何适用背景图片的地方 线性渐变 径向渐变 重复渐变 2 渐变语法 在CSS3中使用background image
  • leetcode shell题解

    195 Tenth Line print just the 10th line of a file sed n 10 10p file txt 194 Transpose File For example if file txt has t
  • 主流编程语言介绍

    目录 前言 一 编程语言作用 1 1 Python 1 2 Java 1 3 JavaScript 1 4 Go 1 5 PHP 二 Python和PHP学习网站 2 1 菜鸟教程 2 2 W3school 总结 前言 主流的编程语言有很多
  • 流图(程序图)表示程序的控制流——>McCabe方法度量程序空间复杂度

    McCabe方法 McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度 这样度量出的结果称为程序的环形复杂度 为了突出表现程序的控制流 人们通常使用流图 也称程序图 1 流图 所谓流图实质上是 退化了的 程序流程图 它仅仅描绘程序
  • OpenCDA代码学习笔记(1)——CARLA-SUMO联合仿真demo

    本文主要记录一下自己最近学习开源项目OpenCDA代码的笔记 简而言之 该项目用Python实现了全栈式自动驾驶算法的开发 也实现了CARLA SUMO的联合仿真 该部分参考了CARLA官方给出的联合仿真实例代码 学习该项目代码的主要目的是
  • 超详细Python安装教程

    Python官网地址 https www python org 1 进入官网 点击download选择系统 2 点击最新的Python版本 3 进入新页面 下拉至Files处 选择系统位数的执行运行程序 我的系统是64位 4 点击安装文件
  • 微信小程序开发笔记—获取颜色十六进制值

    获取颜色十六进制值 十六进制颜色代码是在软件中设定颜色的代码 可以先查询以下目标颜色的RGB值 然后将三个值均转换成十六进制即是目标颜色的十六进制值 转换这里可以使用电脑计算器中的程序员模式 比如目标颜色为香芋紫 查询得知该颜色的RGB值分
  • C++57个入门知识点_55 函数模板(template<typename T>;T GetMin(T a, T b){};函数模板定义;隐式实例化;显式实例化;函数模板特例;实例化后模板才有效)

    本篇主要讨论函数模板的相关知识点 前言 typename 是一个C 程序设计语言中的关键字 当用于泛型编程时是另一术语 class 的同义词 这个关键字用于指出模板声明 或定义 中的非独立名称 dependent names 是类型名 而非
  • 从 BBR 失速到带宽探测

    看一下 pacing 流失速的成因 一段时间收不到 ack 丢了 ack 自时钟 cwnd 将耗尽 bbr 虽有 cwnd gain 上图没有表现 但在该 cwnd gain 下不依赖 ack 持续坚持发送多久取决于 cwnd gain 的
  • hashmap的常见静态属性和方法

    1 hashmap的常见的静态属性 hashmap默认的容器大小 16 static final int DEFAULT INITIAL CAPACITY 1 lt lt 4 hashmap默认最大的容器大小 超过不再扩容 static f