HashMap及其常见面试题

33 阅读2分钟

一、HashMap

1、哈希(hash)

核心理论: Hash也称散列、哈希,对应的英文都是Hash。基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值。

Hash的特点:

  • 1.从hash值不可以反向推导出原始的数据
  • 2.输入数据的微小变化会得到完全不同的hash值,相同的数据会得到相同的值
  • 3.哈希算法的执行效率要高效,长的文本也能快速地计算出哈希值
  • 4.hash算法的冲突概率要小。 由于hash的原理是将输入空间的值映射成hash空间内,而hash值的空间远小于输入的空间。 根据抽展原理,一定会存在不同的输入被映射成相同输出的情况。

抽展原理:桌上有十个苹果,要把这十个苹果放到九个抽展里,无论怎样放,我们会发现至少会有一个抽展里面放不少于两个苹果。这一现象就是我们所说的“抽屉原理”。

2、HashMap继承体系图

image.png

3、node数据结构

image.png

4、put过程图

image.png

5、哈希碰撞

image.png

6、引入红黑树(解决链化,提高效率):自平衡的二叉查找树

HashMap底层存储结构: image.png

二、源码分析

1、构造函数分析 image.png 也就是说,通过HashMap创造出来的数组长度,一定是2的次方数 image.png 2、put方法分析=>putVal方法分析

image.png

image.png

image.png

image.png

image.png 3、resize()函数:扩容函数分析。重要!!!

image.png

image.png 核心:实现扩容 image.png

image.png 扩容图示:16->32 image.png 4、get()方法分析

image.png

image.png 5、remove()方法分析

image.png 正常:

image.png

image.png image.png

image.png 6、replace()函数 image.png 红黑树原理源码讲解(java),全B站讲解最细致版本,看完月薪最少涨5k!_哔哩哔哩_bilibili 红黑树讲解