实现原理
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