博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashMap的实现原理是什么?
阅读量:4222 次
发布时间:2019-05-26

本文共 451 字,大约阅读时间需要 1 分钟。

HashMap是根据Map接口实现的一种键值对数据结构,其中允许出现null的键或值;其顺序不固定。

在Java中,基本类型可看做基础数据类型和引用类型(用于模拟C/C++中的指针),HashMap实际上是一种数组+链表的结合体。在JDK1.8之后,一旦链表的节点数据超过八个,就会将底层转为红黑树结构。

HashMap底层在存储数据时,首先会根据Key的hashcode进行比较,如果发生hash冲突,就会继续判断值是否相同,如果相同,则直接进行覆盖,如果不同,则将其放入链表中保存。

同样的在获取值时,也会首先根据key的hash值进行判断如果有多个一样的hash值(hash冲突),则继续根据key进行查找(在链表中查找)

实际上如果没有出现hash冲突,数据是放在数组中的,一旦出现了hash冲突,就将冲突的对象形成链表结构,查询时也是类似,一旦发现冲突就对key进行比较,这种方法也称为“拉链法”

相当于根据hash值寻找到数组的指定元素,如果为空则直接插入,如果已有数据则放置到链表最后。

转载地址:http://qfmmi.baihongyu.com/

你可能感兴趣的文章
WebGL自学教程《OpenGL ES 2.0编程指南》翻译——勘误表
查看>>
WebGL自学教程——WebGL示例:12. 要有光
查看>>
WebGL自学教程——WebGL示例:13.0 代码整理
查看>>
WebGL自学教程——WebGL示例:14.0 代码整理
查看>>
恶心的社会
查看>>
中国式危机公关9加1策略(第五章 慎用信息控制策略)
查看>>
展现自己的人生智慧
查看>>
深入理解java多态性
查看>>
Java新手进阶:细说引用类型
查看>>
osg中使用MatrixTransform来实现模型的平移/旋转/缩放
查看>>
(一) Qt Model/View 的简单说明
查看>>
(二)使用预定义模型 QStringListModel例子
查看>>
UVM:7.4.5 加入存储器
查看>>
UVM:7.5.1 期望值与镜像值
查看>>
UVM:7.5.2 常用操作及其对期望值和镜像值的影响
查看>>
UVM:7.6.1 检查后门访问中hdl 路径的sequence
查看>>
UVM:7.6.2 检查默认值的sequence
查看>>
UVM:7.7.1 使用reg_predictor
查看>>
UVM:7.7.2 使用UVM_PREDICT_DIRECT功能与mirror 操作
查看>>
UVM:7.7.3 寄存器模型的随机化与update
查看>>