Java HashMap

实现原理

HashMap 是数组 + 链表 + 红黑树(JDK1.8 增加了红黑树部分)实现的。

1、什么是hash
它是将一个任意长度的二进制值通过一个映射关系转换成一个固定长度的二进制值。

  • 任意长度的二进制值
  • 映射关系(哈希算法—就相当于一个大学里面的学号的映射规则)
  • 固定的二进制值(哈希值—相当于我们的大学里面的学号)

任意长度的二进制值 和 固定长度的二进制值 是一个一一对应关系
固定长度的二进制值就相当与一个任意长度的二进制值的一个摘要
固定长度的二进制值相当于一个关键字key
真正有效的数据 就是这个学院的基本信息,一个任意长度的二进制值value

key-value
hash 只是确定了一个key和一个value的唯一映射关系
为什么要这么做?

2、hash表
特点:最重要的特点,他的存储效率很高,取数据的时间复杂度是1,o(1)

hash 通过一个key一个输入,通过一个hash函数,来找到数组中与这个key唯一映射的value,根据这个hash函数找到数组中这个value的下标

table aaa=[];
aaa[];

int index=hash(key);
int value=aaa[index]:O(n);

3、hash函数
key,找下标,有哪些方法可以找到下标
a、取余数法
b、平方取中法
4、hash表处理冲突

红黑树

又称平衡二叉树

相关文档:https://blog.csdn.net/sun_tttt/article/details/65445754

常见面试题

怎么扩容的?
put的操作?

参考文档

https://www.cnblogs.com/chengxiao/p/6059914.html#t1
https://blog.csdn.net/iispring/article/details/46594725
https://mp.weixin.qq.com/s/uw5fbEQt0fz80Zk2UCEcNw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值