hashmap源码相关

3.4 ISIS和OSPF之间路由引入 通过以上输出可以看到OSPF的路由引入到了IS-IS中。通过以上输出可以看到ISIS的路由没有传递给OSPF。通过以上输出可以看到OSPF的路由没有传递给ISIS。通过以上输出可以看到ISIS的路由被引入进了OSPF。掌握在IS-IS中引入OSPF路由的方法。掌握在OSPF中引入IS-IS路由的方法。图3-3:ISIS和OSPF之间路由引入。在R3上把ISIS的路由引入到OSPF。OSPF引入外部路由的缺省度量值为1。在R3上把OSPF的路由引入到ISIS。引入的外部路由类型为Type2。 阅读详情

哈希函数

  • 将任意长的输入映射成固定长的输出的比特串

h:{0.1}^* -> {0,1}^n

  • 计算机科学领域:
    • 表示将关键字的集合映射到地址集合上,实现记录的快速查找
  • 在密码学中:
    • 将任意长度的消息压缩成固定长度的哈希值(称为消息摘要或数字指纹签名等)

jdk1.7中hashmap组成

  • 数组+链表
  • 加入新值:
    • 根据key值获取一个哈希值
    • 由哈希值与当前数组大小取模确定放入位置
    • 在对应位置放入数组元素对应的链表中 更改原元素对应链表的头链指向(新加入的值存在在该链表的头链) 完成加入新值
  • 获取值:
    • 根据key值获取对应的哈希值x
    • 由获取到的哈希值x以及数组大小 找到数组中的元素
    • 遍历该元素下的链表 当里面某个元素的哈希值等于x时返回该元素 否则返回null

jdk1.8中hashmap组成

  • 数组+红黑树
    • 弥补1.7中使用链表的不足:即便哈希映射 难免会造成某个链表过于长 导致查询效率降低
    • 红黑树 当某个链表长度大于8时 该链表将自动被触发改为红黑树(查找效率log2n,也叫自平衡二叉查找树)
  • 加入新值:
    • 根据key值获取一个哈希值
    • 由哈希值与当前数组大小取模确定放入位置
    • 判断对应位置元素是否是树结点
    • 如果不是树节点 则是链表 则
    • 在对应位置放入数组元素对应的链表中 移动指向到链尾 并计数器加一 然后更改原链尾元素的next指向(新加入的值存在在该链表的链尾) 完成加入新值 若加入后计数器大于8 则进行链表红黑树化
    • 如果是树结点 按照红黑树的规则加入新元素
    • 不管是树或者链表 因为新加入元素在链尾 因此扩容时不用担心多线程下形成死循环问题 不会造成死锁(扩容时依旧不改变元素顺序)

数组容量有关

  • 当使用hashmap时传入初始数组容量的值 实际的容量值会是大于传入值的第一个2次方数(调了源码内部函数获取)
  • 所有的2次方数-1得到的数x 对应的源码都是前4n位为0后4n位全为1 这样进行异或运算 就可以得到被运算数的后几位源码值z
  • 上述性质 就是很多时候要使用2次方数 然后减一进行异或的原因
  • 若要让前4n位也参与到运算哈希 则把x右移4n位得到y 再用y与z进行一次异或 这样就可以充分运用到原数据了

hashmap扩容

  • 当当前数组大小>阈(yu)值(=当前数组容量乘以装载因子0.75)时开始扩容
  • 使用双重循环 运用与jvm中的复制标记方法类似思想 先申请足够大的空间 再逐个放入 先数组元素 再每个元素下对应的链表
  • 在jdk1.7下 当使用多线程进行扩容时 可能会导致移动链表全部元素时 产生循环链表造成死循环(扩容前后链表元素顺序会被掉头 next指向可能会混乱) 然后链表元素总移不完 形成“死锁”

concurrenthashmap

  • 像hashmap的升级版 保证并发安全
  • jdk1.7:
    • 在hashmap基础上 加了分段锁 即在数组之上 相邻两个数组元素归为一个segment 整个ConcurrentHashMap由segment数组组成
    • segment继承了ReentranLock 故自带了一把可冲入锁 单个segment是一个小型的hashmap
    • 这样保证那下面的两个链表或者树的操作线程安全 同时 锁的粒度不至于过大(如hashtable 在每个方法上加锁 粒度太大) 影响效率
  • jdk1.8:
    • 在hashmap基础上 考虑到每个线程中的put操作 都要访问数组元素 再访问旗下的链表或者树(对头节点加锁了)
    • 在put方法中 对数组元素加锁 这样就可以更细化粒度 也保证并发安全
基于simulink的电气弹簧ES稳压控制模型仿真 若要补偿母线电压的谐波,需控制ES上的谐波,即在单闭环母线电压有效值控制的基础上,增加谐波抑制环节来进行谐波控制,现有的各种检测和抑制谐波的方法有采用模拟滤波器、傅里叶分析进行谐波分析、基于瞬时无功功率理论的方法等。当关键负载ZC为电流源型非线性负载时,电路原理图如图7所示,由于电流源型非线性负载可以等效为谐波电流源,关键负载电流ic便会含有谐波分量,导致输电线电流is和母线电压VS同样会含有谐波分量,导致供电质量的严重下降,对用电设备的正常工作造成影响。分别为流过线路阻抗、非关键负载、关键负载的电流, 阅读详情

相关推荐

FreeSWITCH实战:5分钟搞定阿里云SDM(MRCP-SERVER)语音机器人搭建(含Docker部署技巧)

本文详细介绍了如何利用FreeSWITCH与阿里云SDM(MRCP-SERVER)快速搭建高可用语音机器人,包括Docker部署技巧、系统调优及高可用架构设计。通过实战案例和优化建议,帮助开发者5分钟内完成部署,提升语音交互系统的性能和稳定性。

stone的博客 504

最详细的Hashmap源码解析

最详细的HashMap源码解析,从底层代码一步一步走进实现过程及其原理,非常实用。

qq_45830276的博客 2073

Source Insight 4.0舒适黑主题 仿心情看的舒服就行

Source Insight 4.0主题 仿心情看的舒服就行 source insight自带的主题怎么看怎么别扭,于是在试用全网各种主题配色后,在其中一个基础上自定义了c/c++的语法配色 截全图有点糊 函数定义 全局变量 局部变量 枚举变量引用 全局变量引用及结构体成员 宏定义引用 ----------------------后面会再把主题文件贴上来-------------- ...

weixin_43443402的博客 1303

Java基础笔记(2)——HashMap的源码,实现原理,底层结构是怎么样的

Java基础笔记(2)——HashMap的源码,实现原理,底层结构是怎么样的 HashMap的源码,实现原理,底层结构 1、HashMap: HashMap是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。 (除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。) 此类不保证映射的顺序,特别是它不保证该...

weixin_40689446的博客 714

MFC界面库BCGControlBar v32.0 - 对话框、仪表盘控件升级

亲爱的BCGSoft用户,我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFCv32.0正式发布!新版本支持Windows 11、增强功能区简化模式、改进控件外观等,以及其他新功能和改进。需要最新版的可以点击这里【BCG下载】 BCGControlBar Pro for MFC v32.0正式版下载 对话框和表单 1. 添加了一个新的全局标志globalData.m_bAutoPrepareComboListStyles:如果您希望.

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 1148

从零开始:面板数据熵值法的Stata实现与常见陷阱解析

本文详细介绍了面板数据熵值法在Stata中的实现步骤与常见陷阱解析。通过熵值法客观赋权特性,科学构建综合指数,特别适合处理多维面板数据。文章涵盖数据预处理、标准化方法选择、Stata代码实现及结果可视化,并针对常见问题提供实用解决方案,助力研究者避免分析误区。

study的专栏 618

HashMap源码分析

文章目录简介继承关系存储结构源码分析属性Node节点TreeNodeHashMap 构造方法put 添加方法待更新 简介 在我们对数据存储的时候都会有数据结构这种东西,但是传统的底层数据结构比如数组或链表,不够好用,所有一些大神就为我们对这些基础数据结构作了进一步的封装,有了更高级的数据结构,而HahsMap就是由此而来,HashMap采用key/value存储结构,每个key对应唯一的value。查询和修改的速度都很快,能达到O(1)的平均时间复杂度。它是非线程安全的,且不保证元素存储的顺序 继承关系

念念不忘,必有回响 5698

GPS数据处理必备:IGS精密星历下载与使用全攻略(附武汉大学/CDDIS/CODE/GFZ地址)

本文为GPS/GNSS数据处理者提供了IGS精密星历的完整下载与使用指南。详细解析了最终、快速、超快速三种精密星历产品的区别与选择策略,并手把手教学如何从武汉大学、CDDIS、CODE、GFZ四大主流数据中心高效获取数据,涵盖文件命名规则解析及自动化下载脚本,助力科研与工程应用。

weixin_29234239的博客 684

史上最全HashMap源码整理

文章目录1. HashMap的继承关系1.1 AbstractMap2. HashMap的变量2.1 为什么建议HashMap初始化时设置初始容量?2.2 为什么初始容量是16(2的幂次)?2.3 为什么加载因子是0.75f?3. HashMap的数据结构3.1 一些基本概念1. hash2. 碰撞3.2 数据结构4. HashMap的方法4.1 put()方法4.1.1 hash() 方法4.1.2 putVal() 方法4.1.3 resize() 方法4.2 get()方法5. HashMap的

sutong_first的博客 2439

【踩坑记录】Latex引文bib报错

VScode+Texlive+Zotero本地论文写作环境踩坑。解决Zotero导出bib文件后tex中通过cite引用时所产生的问题。

weixin_43319948的博客 2823

[Dify] -进阶13- 使用“知识库 + 工作流”打造智能推荐系统

本文介绍了在Dify平台上构建智能推荐系统的方法,重点阐述了知识库与工作流技术的结合应用。通过知识库管理RAG流程,实现文档上传、向量嵌入和检索优化;利用工作流设计节点化推荐逻辑,支持并行处理与条件分支。以电话销售话术推荐为例,展示了从数据收集到实时生成的完整流程。该方法具有准确性高、扩展性强、维护简便等优势,可广泛应用于各类推荐场景,实现从数据存储到智能推荐的闭环解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1068

HashMap源码分析和常见面试相关小结

本篇分析HashMap的 hash()函数 和 底层数据结构 以及 常用方法 和 常见面试相关题目 1. HashMap简介 HashMap 是一个K,V键值对的常用集合类,它实现了Map接口。 jdk1.8 之前 HashMap 采用 数组 + 链表 的方式实现,链表存储key值冲突的数据。 jdk1.8 采用 数组 + 链表 / 红黑树 的方式实现,在满足下面两个条件之后,会执行链表转红黑树操作,以此来加快搜索速度。 链表长度大于阈值(默认为 8) HashMap 数组长度超过 64 2. H.

CarrotZsy的博客 185

SAP 系统升级不再惧怕 SPAU 与 SPDD:把修改调整做成可控的工程

SAP系统升级中的SPAU/SPDD处理要点:首先明确SPDD处理数据字典对象,SPAU处理程序对象,核心是解决标准对象变更与历史修改的继承问题。关键原则是优先回归标准版本,减少后续升级负担。操作时应利用版本管理对比差异,批量处理可回退对象,并通过F9多选提高效率。对于提示"当前版本与建议一致"的对象直接回归标准。注意区分新旧SPAU界面功能差异,将Note下载移至SNOTE处理,并确保在SPDD/SPAU之后处理SPAU_ENH。最后,所有调整需记录日志并纳入传输请求,确保可追溯性。遵

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

HashMap考点相关源码解析

面试的一面通常以基础知识为考点,其中HashMap是数据结构考察的常客。本文在HashMap源码分析基础上,对考点由进行了汇总和总结,方便读者和自己查阅。

阿根的专栏 1134

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HashMap相关源码解读

1. hashmap 插入 判断数组是否为空,为空进行初始化; 不为空,计算 k 的 hash 值,通过 (n - 1) & hash计算应当存放在数组中的下标 index ; 查看 table[index] 是否存在数据,没有数据就构造一个Node节点存放在 table[index] 中; 存在数据,说明发生了hash冲突, 继续判断key是否相等,相等,用新的value替换原数据(onlyIfAbsent为false); 如果不相等,判断当前节点类型是不是树型节点,如果是树型节点,创建树型节点

doublez的博客 6064

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

HashMap 源码面试相关

Q1. 默认初始化大小为什么是 16 而不是 8 或者 32 ? 为什么不直接写 16 ,而是写 1<<<4 ? /** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 如果太小,4或者8,扩容比较频繁;如果太大,32或者64甚至太大,又占用内存空间 位运算更快,不需十进制和二进

雨落本无晴 688

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java集合源码之HashMap及相关问题

HashMap源码及相关问题HashMap简介HashMap的存储结构JDK1.8的HashMap源码HashMap的几个属性HashMap的构造方法空参构造一个参数的构造方法双参数的构造方法带Map类的构造方法HashMap中的table桶数组HashMap计算哈希值/索引的方法JDK1.7的hash算法JDK1.8的hash算法HashMap的put方法HashMap的树化treeifyBin方法HashMap的扩容resize()HashMap的get()方法JDK1.8 HashMap的源码总结

LY010106的博客 261

HashMap的相关源码分析

前提知识:   常见数据结构   (暂未发布)java.lang.Object的hashcode与equals函数 HashMap的数据结构--基于hash表实现 源码分析: 补充:(暂未发布)transient瞬态非序列化关键字详情 public class HashMap<K,V>{ //链表的数组容器 transient Node<...

weixin_33896069的博客 85

hashmap面试相关、源码剖析

hashmap源码解析 面试相关

qq_31671187的博客 210

HashMap源码与相关面试题

一、哈希表 哈希表是一种可以快速定位得数据结构。哈希表可以做到平均查找、插入、删除时间是O(1),当然这是指不发生Hash碰撞得情况。而哈希表最大得缺陷就是哈希值得碰撞(collision)。 Hash碰撞:就是指hash桶有多个元素了。常见解决哈希碰撞得方法就是在hash桶后面加个链表 这里就引入第一个问题:为什么Map的底层设计要采用哈希表的这种数据结构? HashMap设计时,要求其...

程序员日记 999

HashMap 源码解析二、put 相关函数

if ((tab = table) == null || (n = tab.length) == 0)//注释1我们知道因此可以知道和n = 16if ((p = tab[i = (n - 1) & hash]) == null) //注释2我们是第一次调用,肯定是null ,于是我们这次就成功的把key,value 存到了tab[i]中。threshold为扩容阈值,初始化时为。

2401_86354273的博客 745

【JAVA】面试1——HashMap源码的深入 以及 SpringBoot的相关问题

HashMap的实现原理? HashMap什么时候会进行rehash? https://blog.youkuaiyun.com/vking_wang/article/details/14166593 HashMap什么时候会进行扩容? https://blog.youkuaiyun.com/u010558660/article/details/50926227 HashMap的初始容量设置成多少比较...

LED_of_Java的博客 279

hashMap 容量相关的部分源码解读

首先HashMap有这几个参数 /** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * The maximum capacity,...

qq_36559868的博客 153

HashMap相关源码补充(扩容)

初始化桶大小为16,最大值为 1<<30,也就是2的30次方,因为2的31次方在java中是负数,实际上在resize方法中有一个判定 if (oldCap >= MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return oldTab; } 当桶的数量超过1<<30的时候会变成Integer.Max_VALUE 字段table 真正存储数据的数组 字段s

木易的博客 179

HashMap源码解析及相关面试题

HashMap源码

chanceforme的博客 108

java中HashMap的理解与相关问题(配合源码服用)

HashMap的理解与相关问题(配合源码服用),其中包含源码的解释,包含一些说明

weixin_51395608的博客 995
上一篇: xml学习
下一篇: 对象的 序列化与反序列化
zy_com
博客等级 码龄9年 2粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值