长文深度解读HashMap

Grok 4技术深度解析:长程推理、工具可信调用与人类意图对齐 大语言模型的进化正从‘答得对’转向‘信得过、用得稳、靠得住’。长程推理稳定性、工具调用可信度、人类意图对齐的颗粒度,已成为企业级AI落地的核心瓶颈。这些能力不再依赖单纯参数膨胀,而是由训练数据中的决策代价标注、跨卡KV缓存调度、三层工具验证架构等底层工程设计共同支撑。在财报分析、代码审查、科研综述等真实高置信度场景中,模型需兼顾逻辑严谨性、执行可审计性与边界可解释性。Grok 4的实践表明:算力投入的本质是为确定性服务,而真正的智能跃迁,体现在它‘知道自己不知道’的清醒,以及‘主动标注不确定性’的工程自觉。 阅读详情

主要静态变量

 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; static final float DEFAULT_LOAD_FACTOR = 0.75f; static final int TREEIFY_THRESHOLD = 8; static final int UNTREEIFY_THRESHOLD = 6; static final int MIN_TREEIFY_CAPACITY = 64;
复制代码
  • DEFAULT_INITIAL_CAPACITY 默认的初始化容量,即16;

  • DEFAULT_LOAD_FACTOR 默认的负载因子

  • TREEIFY_THRESHOLD 当一个槽(或叫bin、buket)的链表长度到达改阈值时,是将链表转换为红黑树的一个必要条件,注意只是一个必要条件,并不是充分条件,后面马上就会说明原因。

  • UNTREEIFY_THRESHOLD 当一个槽数据退化到该阈值时,红黑树将退化成链表;

  • MIN_TREEIFY_CAPACITY 当容量小于该值时,即使链表长度到达TREEIFY_THRESHOLD 也不会转换红黑树,而是通过resize()的方式进行扩容。所以别再说当链表长度大于8时就会转换红黑树了,这个条件不具备的情况下是不会转换的,具体代码在treeifyBin()方法中,下面也会讲到。

这里说一个反常识,可能是因为八股文背得多了,大家对HashMap链表转红黑树慢慢的认为是一个很容易发生的情况,但是从源码中我们其实可以看到官方的一些理论数据如下,可见正常情况下一个HashMap中出现红黑树的可能性是非常低的。

 * Ideally, under random hashCodes, the frequency of * nodes in bins follows a Poisson distribution * (http://en.wikipedia.org/wiki/Poisson_distribution) with a * parameter of about 0.5 on average for the default resizing * threshold of 0.75, although with a large variance because of * resizing granularity. Ignoring variance, the expected * occurrences of list size k are (exp(-0.5) * pow(0.5, k) / * factorial(k)). The first values are: * * 0:    0.60653066 * 1:    0.30326533 * 2:    0.07581633 * 3:    0.01263606 * 4:    0.00157952 * 5:    0.00015795 * 6:    0.00001316 * 7:    0.00000094 * 8:    0.00000006 * more: less than 1 in ten million
复制代码

HashMap的构造方法

     public HashMap(int initialCapacity, float loadFactor) {         if (initialCapacity < 0)             throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity);         if (initialCapacity > MAXIMUM_CAPACITY)             initialCapacity = MAXIMUM_CAPACITY;         if (loadFactor <= 0 || Float.isNaN(loadFactor))             throw new IllegalArgumentException("Illegal load factor: " + loadFactor);         this.loadFactor = loadFactor;         this.threshold = tableSizeFor(initialCapacity); //这个方法也很有意思,后面会讲     }     public HashMap(int initialCapacity) {         this(initialCapacity, DEFAULT_LOAD_FACTOR);     } ​     public HashMap() {         this.loadFactor = DEFAULT_LOAD_FACTOR;      } ​     public HashMap(Map<? extends K, ? extends V> m) {         this.loadFactor = DEFAULT_LOAD_FACTOR;         putMapEntries(m, false);     }
复制代码

这里值得注意的是,在构造方法中,除最后一个构造方法外,其他构造方法中并没有真的去初始化我们熟悉的链桶结构。

那什么时候初始化的呢?其实是在put()数据时才会触发真正的初始化,这里我理解为一种延迟初始化的策略。

还有一个常见的说法是在能够明确集合大概容量的情况下推荐使用HashMap(int initialCapacity)的方式进行构造,原因主要是这样减少了因为容量增长导致的resize()操作。

关于Hash()

HashMap的hash方法比较有意思,也能引一些代码细节上的思考。

    static final int hash(Object key) {         int h;         return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);     }
复制代码

为什么需要(h = key.hashCode()) ^ (h >>> 16) 即 将key的hashcode的前16位与后16位进行异或操作。

在说原因之前我们看下这个hash值的使用场景一般是在计算一个key/value应该落在table[]的哪个槽里,会对key进行hash(key)操作,得到一个hash值,而槽的index的计算方式一般是(n - 1) & hash这里n 一般为2的整数次方,所以n-1的二级制一般是都是1,如8-1的二进制是111,16-1=binary:1111,所以(n-1)&hash肯定是小于等于n-1的,所以当hash满足随机性,其计算出来的index也具备随机性。那为何不直接使用hashCode呢?为啥还要多此一举搞一个异或呢?

这是因为通常情况下n的值不会特别大,这种计算方式往往只能与hash的后几位进行运算,这样就可能出现一些高位不同,地位相同的hash值计算出同一个结果,导致冲突概率增加。

所以回过来看一下(h = key.hashCode()) ^ (h >>> 16) 就能够理解一些了,将高位16位与低16位进行异或,让高位的随机性影响到地位,从而达到让冲突的概率更低的效果。

是不是很巧妙。

//先到这,待更新


 

2026年Java面试指南:从JVM调优到AI大模型实战 JVM内存模型是Java虚拟机管理内存的核心机制,通过划分堆、栈、方法区等区域实现内存分配与回收。其原理涉及垃圾收集算法、内存屏障等技术,保障程序运行时的高效与稳定。在分布式系统和高并发场景下,合理的JVM调优能显著提升吞吐量和降低延迟,例如通过G1GC优化响应时间或调整元空间避免内存溢出。结合AI大模型的应用开发,Java工程师需要掌握HTTP客户端调用、结果缓存与性能监控等工程实践,确保智能服务的可靠性。本文以面试准备为主线,系统梳理从环境配置到场景设计的全流程,帮助开发者构建扎实的技术体系。 阅读详情

相关推荐

【SAP】ABAP——ALV显示后选择数据操作

在ALV显示后,可全选、全不选或者选择几条数据进行发邮件、更新、下单等等操作。 在user_command中的实现方式如下: 方式一: FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield. DATA: lr_grid TYPE REF TO cl_gui_alv_grid. DATA: lt_rows TYPE lvc_t_row WITH

Mona_1220的博客 4091

八股文:集合知识图谱——HashMap篇

以map为轴心来讲述Java集合体系 一、HashMap原码剖析 二、HashMap的横向比较

mlgseminent的博客 1399

EFR32BG22 Thunderboard开发板 使用SPI 读取加速度计

Simplicity Studio v5 创建Silicon Labs蓝牙SoC EFR32BG22 Thunderboard模块的加速度计工程,模块上有一个ICM-20648 6轴运动跟踪设备,集成3轴加速度计和3轴陀螺仪功能,使用SPI接口跟EFR32BG22芯片连接。 我尽量以图片的形式展示(少打字): 将EFR32BG22的Thunderboard模块通过USB线插入到电脑,打开Simplicity Studio v5软件。 下面看重点: 点击搜索到的IO Stream: USART,点击Ins

qq_25727979的博客 1494

HashMap八股文,一篇就够了

HashMap ① HashMap 的底层结构和原理 HashMap 就是以 Key-Value 的方式进行数据存储的一种数据结构嘛,在我们平常开发中非常常用,它在 JDK 1.7 和 JDK 1.8 中底层数据结构是有些不一样的。总体来说,JDK 1.7 中 HashMap 的底层数据结构是数组 + 链表,使用 Entry 类存储 Key 和 Value;JDK 1.8 中 HashMap 的底层数据结构是数组 + 链表/红黑树,使用 Node 类存储 Key 和 Value。当然,这里的 Entry 和

cV展示的学习园 2万+

算法竞赛推荐书单

前言 入坑算法竞赛已经一年半了,在这期间也读了不少关于算法竞赛的书,这些书对我的帮助还是蛮大的。平时看题解多是个人零散的题解,很难以系统的去学习,认认真真的挑选1-2本书来阅读,无论是从思维能力还是文字表达能力都会得到提升,以下都是我自己读过的书进行一下分享,难度由浅入深,部分书籍浅尝而止。 入门:《啊哈!算法》 适合:总题量150以下初步掌握C语言的萌新 一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点,通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松

TGX的博客 8241

Ubuntu系统 nano 编辑器使用教程

• 原因:文件编码不兼容(如 Windows 的 CRLF 换行符)。• 若使用 SSH 工具(如 PuTTY),确保终端设置中未占用。掌握这些操作后,你可以高效使用 nano 完成大部分文本编辑任务!• 底部快捷键栏:显示常用操作的快捷键(• 如果文件已修改,会提示是否保存:按。• 顶部状态栏:显示文件名和编辑状态。表示 Ctrl + G(查看帮助)。保存时自动生成备份文件(原文件名后加。• 强制保存只读文件:用。启动 nano 时添加。启动 nano 时添加。(重做)触发自动缩进。

qq_44534541的博客 2084

<Java八股文面试>HashMap深度解析 , 一文让你彻底搞懂HashMap

<Java八股文面试>HashMap深度解析 , 一文让你彻底搞懂HashMap

LXYDSF的博客 2126

FPGA实战:用DDR3和乒乓操作解决视频帧撕裂问题(附Verilog代码)

本文详细介绍了如何利用DDR3内存和乒乓操作架构解决FPGA视频处理中的帧撕裂问题。通过多帧缓存原理、AXI接口配置和自适应乒乓操作设计,有效隔离读写操作,确保视频流稳定传输。文章包含Verilog代码实现和性能优化技巧,适用于工业相机、医疗影像等高速视频处理场景。

m2n3b4v5c6的博客 289

面试八股文之一HashMap源码分析

HashMap源码分析jdk1.7HashMapjdk1.8HashMap 面试官:说一下HashMap的底层数据结构? 面试官:说一下HashMap的扩容机制? 面试官:说一下HashMap是不是线程安全的?从而引出ConcurrentHashMap。 面试官:说一下HashMap的put的过程是怎么样的。 面试官:把你知道的都告诉我。 我 jdk1.7HashMap jdk1.8HashMap ...

心如止水 2670

可控异常的契约化设计:在 ABAP 中用 CX_STATIC_CHECK 把可预期错误变成接口的一部分

文章摘要: 本文探讨了ABAP系统中异常处理的工程化设计原则,强调将可预期的业务异常作为接口契约的一部分。核心观点是:对于调用方能够合理处理的错误情况,应使用继承自CX_STATIC_CHECK的受检异常,通过方法签名强制调用方处理或显式转发。文章对比了ABAP三大异常根类的适用场景,提出"三问法"判断异常是否适合受检处理,并给出了包含上下文信息的异常类实现示例。通过Fiori文件上传案例,展示了如何在分层架构中合理传递和转换异常,最终在OData服务层将业务异常映射为标准错误响应。这种

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

CVPR 2026 即插即用 | 注意力篇 | MSEF:超轻注意力,空间-通道双分支并行融合,既增强特征又抑制噪声!

Multinex提出了一种超轻量级微光图像增强框架,其核心创新是MSEF模块。MSEF采用双分支并行架构,结合空间局部特征(深度可分离卷积)和全局通道注意力(改进SE),通过Tanh激活实现特征增强与抑制。相比传统注意力模块,MSEF在几乎不增加计算量的情况下显著提升性能,特别适合轻量级网络和边缘设备部署。实验表明,该模块能有效提升PSNR约3dB,同时保持极低的参数量(0.7K-45K)。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 604

【八股文】HashMap相关考点

1.HashMap的底层是用什么实现的?答:jdk1.7之前是用的数组+链表,jdk1.8之后是是数组+链表+红黑树。1.1 为什么会用红黑树?答:当多个键的哈希值散列到同一个数组的位置时,插入和删除的时候会退化到O(N)的复杂度,而如果用红黑树会将查询,插入和删除的复杂度降低到O(logN)。而为什么红黑树能够做到这一点,因为红黑树又叫自平衡的二叉搜索树。而二叉搜索树满足左边节点都小于根节点,右边节点都大于根节点的值。

qq_45249273的博客 1268

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。

lwljh134的博客 1803

耗时两个礼拜,8000字安卓面试长文,成功入职字节跳动

现在的IT行业竞争压力越来越大,尤其是Android开发行业。而很多Android程序员却每天都在重复CRUD,原地徘徊! 今年年初,你就想改变现状,于是在网上刷了大量面试题,强行记下之后,开始参加面试!但是你发现,现在的面试,却越来越难了。 投了10份简历,只有一家给了面试邀请。面试官平时的工作内容都不问,问的都是没怎么听过的名词,**什么hybird,NDK,难得问到背过的题,却不按套路出牌问原理,上来就是一顿连环炮,让你措手不及!**甚至怀疑自己是个假的程序员,感觉什么都不懂! 每个人都变得越来越浮

m0_56330481的博客 222

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Claude Sonnet 4.6实测:结构化意图捕捉与工程契约理解

大语言模型的代码能力与长文本处理,本质是能否从非结构化输入中识别隐含技术契约并建模状态逻辑。传统测试聚焦语法生成或上下文长度,而真正影响落地效果的是模型对注释标记、错误日志、协议规范等‘噪声信号’的结构化意图捕捉能力——它决定输出是否可直接集成进CI/CD或生产诊断流程。Claude Sonnet 4.6在此维度实现突破:通过隐式契约图谱构建、有限状态机自动建模、分层锚点索引等机制,在真实工程场景(如Go panic分析、Kafka rebalance归因、PDF技术文档导航)中展现出远超通用推理的确定性与

weixin_34348805的博客 843

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java 中的 hashCode () 与 equals () 核心原理、契约规范、重写实践与面试全解

本文是Java数据结构学习笔记系列,涵盖JAVA初阶到数据结构核心内容,包括集合、泛型、List、ArrayList、LinkedList、栈、队列、二叉树、堆等专题。重点解析了Object类中equals()和hashCode()方法的定义、实现、区别及使用规范,强调重写equals()必须同时重写hashCode()的重要性。通过HashMap源码分析,展示了这两个方法在哈希集合中的关键作用,并提供标准重写模板和IDEA生成技巧。

HRDMN的博客 428

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

40000+字超强总结?阿里P8把Java全栈知识体系详解整理成这份PDF

40000 +字长文总结,已将此文整理成PDF文档了,需要的见文后下载获取方式。全栈知识体系总览Java入门与进阶面向对象与Java基础基础知识点复习完了以后,我们需要深入的理解Java中的一些基础机制:A. Java进阶 - Java 集合框:Java 集合框架应用是极其广泛的,对于其总体框架用法及源码都必要深刻理解。B. Java进阶 - Java 集合框之 Collection源码解读:对核心的Collection类进行源码解读。C. Java进阶 - Java 集合框之 Map & Set 源码解读

xiaohao718的博客 1716

Java String类深度解析与性能优化实践

字符串处理是编程中的基础操作,Java通过String类实现了不可变字符串的设计模式。这种不可变性(immutable)特性既保证了线程安全,也为字符串常量池优化提供了基础。从底层实现看,String内部使用UTF-16编码存储,其equals()和hashCode()方法都基于字符内容实现。在实际开发中,理解字符串常量池机制和StringBuilder的扩容策略对性能优化至关重要。特别是在处理大量字符串拼接时,合理选择StringBuilder可以避免频繁对象创建。本文通过分析String内存模型和常用A

weixin_33816946的博客 383

Java String底层原理深度解析:常量池、intern与字符串拼接机制

String是Java中最基础又最易被误解的核心类,其不可变性、内存布局与JVM常量池紧密耦合。理解String需从对象创建机制切入:字面量直接入常量池,new String()则在堆中分配,二者地址不同导致==比较为false;intern()方法在JDK7+后将对象引用登记至堆内常量池,彻底改变语义;而字符串拼接的三种路径(+、StringBuilder、concat)对应不同字节码实现与性能特征。这些原理直接影响GC压力、序列化体积、缓存Key一致性及安全风险。本文围绕真实高频误区展开,涵盖常量池定位

weixin_30667649的博客 399

分布式集群本地缓存实现

LRU:the least recently used:最近最少使用算法(最后一次使用时间距离当前替换时候的时间差,时间差越大,最先置换或者清除);LFU: the least frequency used:最不经常食用算法(一段时间内,使用次数最低,最先置换或者清除),适合局部周期性流量.LRU-Two-queue:一个FIFO队列,一个LRU队列,新元素首先进入FIFO队列,当再次访问才进入LRU队列;LRU-K:增加队列记录历史访问次数,当访问次数大于k,才会进入缓存LRU队列.cache:(推荐)

飞鸟快快的专栏 739

Claude Code深度解析:代码语义理解与工程级AI协作者实践

AI编程工具正从语法补全迈向代码语义理解——这一范式升级要求模型具备AST解析、上下文建模与工程约束识别能力。基于抽象语法树(AST)的语义分析,使AI能区分`list.isEmpty()`与`list.size() == 0`的业务等价性;128K上下文支持则真实适配微服务链路调试等复杂工程场景。其技术价值在于将AI定位为‘人主导、AI协作者’,强调渐进式生成、安全边界意识与设计决策前置,而非黑盒输出。典型应用场景包括遗留系统重构、多模块联调诊断、Spring生态安全重构及跨语言API契约同步。本文聚焦C

weixin_30338481的博客 419

Java线程问题排查利器:jstack原理、实战与高阶应用

在Java应用性能调优与故障排查领域,线程状态分析是定位问题的核心基础。通过理解线程的RUNNABLE、BLOCKED、WAITING等状态及其转换原理,可以快速诊断程序卡顿、资源争用等并发问题。这一技术对于保障高并发服务的稳定性具有关键价值,广泛应用于在线服务性能瓶颈分析、死锁检测等场景。本文聚焦于JDK内置的jstack工具,它通过获取Java进程的线程栈快照,为上述分析提供原始数据。结合实战案例,文章详细解读了如何利用jstack输出的线程状态与栈信息,关联操作系统线程ID(nid),定位高CPU消耗

weixin_33739646的博客 437

Java服务CPU与内存过高问题排查实战指南

在Java应用性能优化领域,CPU使用率过高和内存泄漏是两大核心挑战,直接影响服务稳定性和响应效率。其原理通常涉及线程调度、垃圾回收机制与对象生命周期管理。深入理解这些底层机制,对于构建高可用系统具有重要技术价值。在实际应用场景中,无论是电商秒杀、实时数据处理还是微服务架构,不当的线程同步、未关闭的资源引用或缓存策略失效都可能导致资源异常消耗。本文聚焦于Java服务性能诊断,系统介绍如何利用jstack、MAT等工具链,结合火焰图与堆转储分析,快速定位死循环、内存泄漏等线上问题,提升工程团队的问题排查与解决

weixin_33721427的博客 447

技术博客创作指南:从持续记录到结构化输出的工程化实践

技术博客创作本质上是知识管理与工程实践的融合。其核心原理在于通过持续、结构化的记录,将碎片化的技术经验转化为可复用、可搜索的知识资产。从概念上讲,这类似于构建个人知识图谱,利用复利效应积累技术认知。在工程实践中,这体现为一系列可操作的方法论:采用增量记录法(如问题驱动、学习驱动的即时笔记),结合Markdown、Git、静态站点生成器等工具链,搭建低摩擦的写作环境。其技术价值在于不仅能沉淀个人经验、提升问题解决能力,还能通过结构化输出(如教程、排错案例、架构解析)赋能技术社区,促进知识共享。常见的应用场景包

weixin_33696822的博客 299

Cursor代码审查工具:从语法检查到业务契约守护的范式升级

代码审查已从传统的语法纠错与静态规则匹配,演进为对业务语义、上下文一致性和系统契约的深度守护。随着AI编程普及,非语法性缺陷——如业务逻辑偏移、隐含约束遗漏、跨模块契约断裂——成为质量风险新焦点。Cursor通过本地轻量模型+云端增强推理+知识图谱三重技术底座,实现语法契约、行为契约与意图契约的分层审查,支持上下文感知提示、历史模式学习与团队规则定制。它不替代人工评审,而是将开发者从低阶Bug排查中解放,聚焦于‘是否符合业务意图’‘是否维持系统一致性’等高阶判断,适用于Spring Boot、React、P

weixin_30680385的博客 362

Codex CLI:面向AI工程化的模型抽象层操作系统

在AI工程实践中,模型接入正从简单API调用演进为统一调度的运行时治理问题。其核心原理在于构建声明式配置驱动的模型抽象层,通过Rust级IO优化、端点协议自适应、MCP工具链集成等技术手段,实现异构模型(如Ollama、vLLM、Claude)的能力收敛与低延迟协同。该架构显著提升模型可维护性与工作流韧性,广泛应用于AI辅助编码、自动化代码审查、混合推理工作流等生产场景。本文深入解析Codex CLI的config.toml运行时契约机制与企业级稳定性保障体系,揭示其作为‘模型中枢操作系统’的技术本质。

weixin_34025151的博客 437
上一篇: 自己写的实战教程就是香!聊聊我写博客的那些事!
下一篇: 如何用Java实现一把 LOL 案例???
Java斗帝之路
博客等级 码龄7年 2392粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值