HashMap常见面试题

Java面试题之 -- HashMap常见面试题总结 1. 你用过HashMap吗, 什么是HashMap? 为什么用到它? 用过, 然后可以接着回答一些HashMap的特性, 比如HashMap可以接收null键值和值, 而HashTable则不能, HashMap是非synchronized的; HashMap很快, 以及HashMap存储的是键值对等. 2. 你知道HashMap的工作原理吗? 你知道HashMap的get() 方法的工作原... 阅读详情

HashMap的底层数据结构?
JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用。

HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的 长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。

所谓扰动函数指的就是 HashMap 的 hash 方法。使用 hash 方法也就是扰动函数是为了防止一些实现比较差的 hashCode() 方法 换句话说使用扰动函数之后可以减少碰撞。
JDK1.8之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值8时,将链表转化为红黑树,以减少搜索时间。

HashMap的存取原理?
1)存方法:put(Object key, Object value)

执行流程如下:

对 key 进行 hash 操作,计算存储 index; 判断是否有哈希碰撞,如果没碰撞直接放到哈希桶里,如果有碰撞则以链表的形式存储; 判断已有元素的类型,决定是追加树还是追加链表,当链表大于等于 8 时,把链表转换成红黑树; 如果节点已经存在就替换旧值; 判断是否超过阀值,如果超过就要扩容。
2)取方法:get(Object key)

执行流程如下:

首先比对首节点,如果首节点的 hash 值和 key 的 hash 值相同,并且首节点的键对象和 key 相同(地址相同或 equals 相等),则返回该节点; 如果首节点比对不相同、那么看看是否存在下一个节点,如果存在的话,可以继续比对,如果不存在就意味着 key 没有匹配的键值对。
Java7和Java8中HashMap的区别
HashMap 在 JDK 7 和 JDK 8 的主要区别如下。

存储结构:JDK 7 使用的是数组 + 链表;JDK 8 使用的是数组 + 链表 + 红黑树。 存放数据的规则:JDK 7 无冲突时,存放数组;冲突时,存放链表;JDK 8 在没有冲突的情况下直接存放数组,有冲突时,当链表长度小于 8 时,存放在单链表结构中,当链表长度大于 8 时,树化并存放至红黑树的数据结构中。 插入数据方式:JDK 7 使用的是头插法(先将原位置的数据移到后 1 位,再插入数据到该位置);JDK 8 使用的是尾插法(直接插入到链表尾部/红黑树)。
为什么HashMap线程不安全
多线程put的时候导致数据不一致 可能会因为扩容引起死循环
HashMap 在并发场景中可能出现死循环的问题,这是因为 HashMap 在扩容的时候会对链表进行一次倒序处理,假设两个线程同时执行扩容操作,第一个线程正在执行 B→A 的时候,第二个线程又执行了 A→B ,这个时候就会出现 B→A→B 的问题,造成死循环。

有什么线程安全的类代替吗
Hashtable或ConcurrentHashMap

默认初始化大小是多少?为啥是这么多?为啥大小都是2的幂?
默认初始大小是16 这样是为了位运算的方便,位与运算比算数计算的效率高了很多,之所以选择16,是为了服务将Key映射到index的算法。 为了存取高效,减少碰撞,把数据分配均匀
HashMap的扩容方式?负载因子是多少?为什么是这么多?
当hashmap中的元素个数超过负载因子×当前大小时,就会进行数组扩容,负载因子的默认值为0.75,也就是说,默认情况下,数组大小为16,那么当hashmap中元素个数超过12的时候,就把数组的大小扩展为32,即扩大一倍,然后重新计算每个元素在数组中的位置。

HashMap的主要参数都有哪些?
HashMap 有两个重要的参数:容量(Capacity)和负载因子(LoadFactor)。

容量(Capacity):是指 HashMap 中桶的数量,默认的初始值为 16。 负载因子(LoadFactor):也被称为装载因子,LoadFactor 是用来判定 HashMap 是否扩容的依据,默认值为 0.75f,装载因子的计算公式 = HashMap 存放的 KV 总和(size)/ Capacity。
HashMap是怎么处理hash碰撞的?
Tips:当输入两个不同值,根据同一散列函数计算出相同的散列值的现象,我们就把它叫做碰撞(哈希碰撞)
HashMap 使用链表和红黑树来解决哈希冲突

HashMap 和 Hashtable 有什么区别?
HashMap 和 Hashtable 区别如下:

Hashtable 使用了 synchronized 关键字来保障线程安全,而 HashMap 是非线程安全的; HashMap 允许 K/V 都为 null,而 Hashtable K/V 都不允许 null; 初始容量大小和每次扩充容量大小的不同。创建时如果不指定容量初始值,Hashtable 默认的初始大小为 11,之后每次扩充,容量变为原来的2n+1。HashMap 默认的初始化大小为16。之后每次扩充,容量变为原来 的2倍。 JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。
为什么重写 equals() 时一定要重写 hashCode()?
因为 Java 规定,如果两个对象 equals 比较相等(结果为 true),那么调用 hashCode 也必须相等。如果重写了 equals() 但没有重写 hashCode(),就会与规定相违背。

HashMap 和HashSet区别
ConcurrentHashMap线程安全的具体实现方式/底层具体实现
首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成。

Segment 实现了 ReentrantLock,所以 Segment 是一种可重入锁,扮演锁的角色。HashEntry 用于存储键值对数 据。

HashMap的底层数据结构? JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用。 HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的 长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。 所谓扰动函数指的就是 HashMap 的 hash 方法。使用 hash 方法也就是扰动函数是为了防止一些实现比较差的 hashCode() 方法 换句话说使用扰动函数之后可以减少碰撞。 JDK1.8之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值8时,将链表转化为红黑树,以减少搜索时间。 HashMap的存取原理? 1)存方法:put(Object key, Object value) 执行流程如下: 对 key 进行 hash 操作,计算存储 index; 判断是否有哈希碰撞,如果没碰撞直接放到哈希桶里,如果有碰撞则以链表的形式存储; 判断已有元素的类型,决定是追加树还是追加链表,当链表大于等于 8 时,把链表转换成红黑树; 如果节点已经存在就替换旧值; 判断是否超过阀值,如果超过就要扩容。 2)取方法:get(Object key) 执行流程如下: 首先比对首节点,如果首节点的 hash 值和 key 的 hash 值相同,并且首节点的键对象和 key 相同(地址相同或 equals 相等),则返回该节点; 如果首节点比对不相同、那么看看是否存在下一个节点,如果存在的话,可以继续比对,如果不存在就意味着 key 没有匹配的键值对。 Java7和Java8中HashMap的区别 HashMap 在 JDK 7 和 JDK 8 的主要区别如下。 存储结构:JDK 7 使用的是数组 + 链表;JDK 8 使用的是数组 + 链表 + 红黑树。 存放数据的规则:JDK 7 无冲突时,存放数组;冲突时,存放链表;JDK 8 在没有冲突的情况下直接存放数组,有冲突时,当链表长度小于 8 时,存放在单链表结构中,当链表长度大于 8 时,树化并存放至红黑树的数据结构中。 插入数据方式:JDK 7 使用的是头插法(先将原位置的数据移到后 1 位,再插入数据到该位置);JDK 8 使用的是尾插法(直接插入到链表尾部/红黑树)。 为什么HashMap线程不安全 多线程put的时候导致数据不一致 可能会因为扩容引起死循环 HashMap 在并发场景中可能出现死循环的问题,这是因为 HashMap 在扩容的时候会对链表进行一次倒序处理,假设两个线程同时执行扩容操作,第一个线程正在执行 B→A 的时候,第二个线程又执行了 A→B ,这个时候就会出现 B→A→B 的问题,造成死循环。 有什么线程安全的类代替吗 Hashtable或ConcurrentHashMap 默认初始化大小是多少?为啥是这么多?为啥大小都是2的幂? 默认初始大小是16 这样是为了位运算的方便,位与运算比算数计算的效率高了很多,之所以选择16,是为了服务将Key映射到index的算法。 为了存取高效,减少碰撞,把数据分配均匀 HashMap的扩容方式?负载因子是多少?为什么是这么多? 当hashmap中的元素个数超过负载因子×当前大小时,就会进行数组扩容,负载因子的默认值为0.75,也就是说,默认情况下,数组大小为16,那么当hashmap中元素个数超过12的时候,就把数组的大小扩展为32,即扩大一倍,然后重新计算每个元素在数组中的位置。 HashMap的主要参数都有哪些? HashMap 有两个重要的参数:容量(Capacity)和负载因子(LoadFactor)。 容量(Capacity):是指 HashMap 中桶的数量,默认的初始值为 16。 负载因子(LoadFactor):也被称为装载因子,LoadFactor 是用来判定 HashMap 是否扩容的依据,默认值为 0.75f,装载因子的计算公式 = HashMap 存放的 KV 总和(size)/ Capacity。 HashMap是怎么处理hash碰撞的? Tips:当输入两个不同值,根据同一散列函数计算出相同的散列值的现象,我们就把它叫做碰撞(哈希碰撞) HashMap 使用链表和红黑树来解决哈希冲突 HashMap 和 Hashtable 有什么区别? HashMap 和 Hashtable 区别如下: Hashtable 使用了 synchronized 关键字来保障线程安全,而 HashMap 是非线程安全的; HashMap 允许 K/V 都为 null,而 Hashtable K/V 都不允许 null; 初始容量大小和每次扩充容量大小的不同。创建时如果不指定容量初始值,Hashtable 默认的初始大小为 11,之后每次扩充,容量变为原来的2n+1。HashMap 默认的初始化大小为16。之后每次扩充,容量变为原来 的2倍。 JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。 为什么重写 equals() 时一定要重写 hashCode()? 因为 Java 规定,如果两个对象 equals 比较相等(结果为 true),那么调用 hashCode 也必须相等。如果重写了 equals() 但没有重写 hashCode(),就会与规定相违背。 HashMap 和HashSet区别 ConcurrentHashMap线程安全的具体实现方式/底层具体实现 首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成。 Segment 实现了 ReentrantLock,所以 Segment 是一种可重入锁,扮演锁的角色。HashEntry 用于存储键值对数 据。
 

手把手教你用UM982搭建厘米级RTK定位系统(附避坑指南) 本文详细介绍了如何使用UM982模组搭建厘米级RTK定位系统,涵盖硬件连接、软件配置和深度优化技巧。UM982支持BDS、GPS、GLONASS和Galileo等多系统全频点信号,特别适合精准农业、无人机导航等高精度应用场景。通过实战案例和避坑指南,帮助开发者快速实现厘米级定位精度。 阅读详情

相关推荐

最大似然估计、梯度下降、EM算法、坐标上升

主要讲解的是机器学习中参数学习算法之间的区别,以及应用的场景。 最大似然估计: 其中目标函数是对数似然函数。为了求目标函数取最大值时的theta。有两个关机键步骤,第一个是对目标函数进行求导,第二个是另导数等于0,求解后直接得到最优theta。两个步骤缺一不可。 梯度下降: 对目标函数进行求导,利用导函数提供的梯度信息,使参数往梯度下降最快的方向移动一小步,来更新参数。为什

tzl2093的博客 5141

HashMap详解以及常见面试题

HashMap详解以及常见面试题 一、概要 本文先会将hashmap的基本概念属性梳理一遍后,再从增删改查方法中每个步骤逐一解释说明。力求达到通熟易懂,逻辑清晰,便于加深印象。 二、概念 首先Hashmap的底层数据结构是由数组+链表组成的,是线程不安全,允许key和value为null。底层结构数组叫哈希桶,而桶内则是链表,链表中的节点Node存放着实际的元素。 Hashmap中获取元素时的主...

Yoga0301的博客 1万+

笔记:使用Materials Studio计算聚合物的玻璃化转变温度

使用Materials Studio计算聚合物的玻璃化转变温度。

FXJgogogo的博客 1940

常见HashMap相关面试题

详细: 常见HashMap相关面试题

qq_46027706的博客 388

8台 × 8卡 910B NPU之顶尖大模型选型分析

本文对比了2026年主流大语言模型在昇腾910B NPU集群上的部署方案。重点评估了GLM5、MiniMax M2.5、Kimi K2.5、DeepSeek V3.2和Qwen 3.5旗舰版等候选模型,从部署需求(显存占用)、能力表现(基准测试、多模态支持)和NPU生态适配度三个维度进行分析。结果显示DeepSeek V3.2综合表现最优:支持BF16/W8A8/INT4量化,在4TB显存环境下可实现2000+ TPS,首token延迟<100ms,且具备官方NPU支持。备选方案Qwen 3.5旗舰版

FeelTouch Labs 756

飞书多维表格省钱攻略:1个专业版账号,全员合规用、权限全掌控

像运动馆、 托管班、作业辅导、少儿美术、书法、口才班等等。对于大多数中小团队而言,飞书多维表格的核心需求是“协作高效、数据可控、成本可控”,而“1个专业版账号+多联系人”的模式,恰好完美契合这三点——既不用为不必要的席位付费,又能解锁全部专业功能,还能通过精细化权限管控保障数据安全。尤其是餐饮店、乒乓球训练馆这类个体经营或小型团队,人员分工清晰、权限需求明确,采用这种模式能最大化节省成本,同时提升管理效率。无需复杂的配置,无需额外的技术支持,5分钟就能搭建起全员协作的省钱体系。

涛涛讲AI 2217

【面试】HashMap常见面试题

大纲一、为什么会有HashMap?二、HashMap是什么?1、为什么是 0.75 这个值呢?追问1、加载因子什么时候适合减少,什么时候适合增加?【优化】2、什么办法来解决因链表过长导致查询时间复杂度高的问题呢?追问1:为什么红黑而非平衡树?追问2:红黑树具体结构及实现,红黑树与查找树的区别体现3、影响 HashMap 性能的因素?4、HashMap 的 key 需要满足什么条件?追问1:HashMap 允许 key/value 为 null, 但最多只有一个。 为什么?追问2:如果重写了equals(),

HeavenDan的博客 1123

华为OD技术面真题 - JAVA开发 - 1

汇总华为OD技术面八股JAVA八股,高频技术真题并提供详细解答。

qq_45776114的博客 1201

HashMap常见的面试题

1.HashMap底层是如何实现的? 首先底层数据结构是由数组+链表组成链表散列。HashMap先得到key的散列值,在通过扰动函数(减少碰撞次数)得到Hash值,接着通过hash & (n -1 ),n位table的长度,运算后得到数组的索引值。如果当前节点存在元素,则通过比较hash值和key值是否相等,相等则替换,不相等则通过拉链法查找元素,直到找到相等或者下个节点为null时。 1...

净慧的博客 1666

HyperLynx(十五)多板仿真

在对话框的“Design file#1”下拉列表中选择“B00,Mainboard”,在其下方的“Reference designators”列表中选择元器件“J1”,然后在“Designfile#2”下拉列表中选择“BO1、RAM1”,在其下方的“Refer ence designators”列表中选择元器件“J1”,单击“Insert”按钮,为这两个元器件建立互连映射。在“Assign Models”对话框中,选择“B00 Motherboard”,将“U16.B12”设置为输出。

小幽余生不加糖 5060

精密装配机器人系列编程:ABB IRB 120_(20).编程项目设计与实施

在精密装配机器人系列编程中,项目的成功设计与实施涉及多个关键步骤。从项目需求分析到最终调试,每一个环节都需要细致的考虑和专业的技术。选择合适的编程语言、设计良好的程序结构、掌握调试技巧以及解决常见问题,都是确保机器人高效、稳定运行的重要因素。通过不断优化和改进,可以提高生产效率和产品质量,满足不断变化的生产需求。

zhubeibei168的博客 1243

HashMap 常见面试题总结

HashMap 常见面试题总结 文章目录HashMap 常见面试题总结1、HashMap 底层原理2、HashMap 为什么设计成数组+链表式结构3、为什么默认长度和扩容后的长度都必须是 2 的幂4、HashMap和Hashtable有主要区别5、关于HashMap 构造方法中 initialCapacity(初始容量)、loadFactor(加载因子)的理解6、 JDK1.7 中 HashMap...

烟雨gps 2066

采用了fluent模拟了平壁面结霜过程。udf,很经典,可以试试。

利用该模型作为FLUENT中的源项,模拟了在局部冷却下冷表面上的霜形成,以预测霜的形态、温度分布和霜的重量,结果与实验结果吻合良好。结果显示,霜首先围绕冷却块形成,然后逐渐向其他方向扩展,冷却块上方的霜密度最大。随着时间的推移,平均霜厚度逐渐增加,生长速率减慢,而平均霜密度随增长速率变快而增加。相变传递微观过程与机理、蒸发及冷凝换热、强化传热、高效传热管、热泵、制冷、节水节能新技术、电子元器件冷却、余热回收及梯级利用等。udf,很经典,可以试试。工程热物理、空调、热能、低温制冷、化工、物理等。

qq_15963745的博客 922

HashMap常见面试题总结

目录 什么是HashMap? 你为什么要用HashMap? HashMap的数据结构? HashMap的工作原理? HashMap key的存储下标是怎么计算的? HashMap为什么速度快?/为什么要使用hashcode? 怎样解决Hash冲突? HashMap怎么解决hash冲突? HashMap什么时候开辟数组,占用内存 初始化,构造函数? HashMap的初始容...

if_i_were_a的博客 2445

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HashMap常见面试题汇总

1 HashMap 的数据结构? 整体是个数组结构,数组的元素是内部类Node,Node中有个成员变量 next,指向后续节点的指针,无哈希冲突时,是个单节点。当发生哈希冲突时,Node节点下将关联节点,形成联表。结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。 transient Node<K,V>[] table; 2 HashMap 的工作原理? HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry

wandou9527的博客 378

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

hashmap常见面试题

1.4 get()方法的工作原理? 根据key的hashcodejinxinghash,得到buckets的值,如果存在碰撞,则利用equals方法在链表中产找   通过对key的hashCode()进行hashing,并计算下标( n-1 & hash),从而获得buckets的位置。如果产生碰撞,则利用key.equals()方法去链表中查找对应的节点。 1.5 HashMap中...

Mar.三月 1130

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

HashMap常见面试题整理

花了三天时间来仔细阅读hashMap的源码,期间补了下不少数据结构的知识,刷了不少相关的面试题并进行了整理 1.谈一下HashMap的特性? 1.HashMap存储键值对实现快速存取,允许为null。key值不可重复,若key值重复则覆盖。 2.非同步,线程不安全。 3.底层是hash表,不保证有序(比如插入的顺序) 2.谈一下HashMap的底层原理是什么? 基...

weixin_30555125的博客 454
上一篇: 微信开发之一键扫码入群的技术实现
下一篇: 微信开发之一键修改好友备注的技术实现
普通网友
博客等级 码龄4年 283粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值