一、HashMap
1、哈希(hash)
核心理论: Hash也称散列、哈希,对应的英文都是Hash。基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值。
Hash的特点:
- 1.从hash值不可以反向推导出原始的数据
- 2.输入数据的微小变化会得到完全不同的hash值,相同的数据会得到相同的值
- 3.哈希算法的执行效率要高效,长的文本也能快速地计算出哈希值
- 4.hash算法的冲突概率要小。 由于hash的原理是将输入空间的值映射成hash空间内,而hash值的空间远小于输入的空间。 根据抽展原理,一定会存在不同的输入被映射成相同输出的情况。
抽展原理:桌上有十个苹果,要把这十个苹果放到九个抽展里,无论怎样放,我们会发现至少会有一个抽展里面放不少于两个苹果。这一现象就是我们所说的“抽屉原理”。
2、HashMap继承体系图
3、node数据结构
4、put过程图
5、哈希碰撞
6、引入红黑树(解决链化,提高效率):自平衡的二叉查找树
HashMap底层存储结构:
二、源码分析
1、构造函数分析
也就是说,通过HashMap创造出来的数组长度,一定是2的次方数
2、put方法分析=>putVal方法分析
3、resize()函数:扩容函数分析。重要!!!
核心:实现扩容
扩容图示:16->32
4、get()方法分析
5、remove()方法分析
正常:
6、replace()函数
红黑树原理源码讲解(java),全B站讲解最细致版本,看完月薪最少涨5k!_哔哩哔哩_bilibili 红黑树讲解