HashMap面试考点
2026-01-08 09:30:08 0 举报
AI智能生成
自我学习使用
作者其他创作
大纲/内容
顶层接口
map
定义了 map 特征,实现map应该具备什么特征
set
一种语义:要求 map 中的 key 无重复
hashmap 成员变量
tables
Entry 类型的数组(哈希表/哈希桶)
size
键值对数量
threshhold
阈值
loadfactory
负载因子
默认:0.75
可在构造方法指定
Entry 类型细节
K - key
键
V - value
值
Entry - next
下一个 Entry 节点
int - hash
key 的 hash 值 - 目的:比较的时候加快速度
HashMap 初始化
最开始 tables 为空
添加第一个元素:默认16大小
数据量庞大的话,应该直接设置table大小,减少扩容操作
其他问题
为什么put的时候先对比 hash
hash是整数,性能高,如果hash对比失败,跳过
扩容细节
默认:扩容两倍 entry 数组
更新内部 table 变量 + threshold
当 key 为 null 的时候
放在 table[0] 中,调用getForNullKey()获取值
JDK8 HashMap 做了哪些优化
原因:哈希冲突比较严重情况,大量元素映射到同一个链表
将链表转换为平衡的排序二叉树
说一下put细节
第一次保存
默认hashmap:分配大小 + threshold 改变
之后的操作
计算 key 的 hash值 + 位运算
位运算目的:哈希更均匀
通过 hash 值找到该键值放在 table 哪个位置
如果 table 有相关数据
遍历:单向链表追加/更新
追加:就到最后
更新:对比 entry 中的 hash 值 + equals 数值对比
添加之前
检查是否需要扩容:size >= threshold
threshold 计算方式
hashmap 大小 * loadfactory
收藏
0 条评论
下一页