HashMap的底层原理学习
HashMap的存储结构
JDK 1.8之前
在JDK 1.7,HashMap采用的是**数组+链表(头插法)**的存储结构。HashMap通过key的hashCode经过hash方法处理过后得到hash值,然后通过 (n - 1) & hash 判断当前元素存放的位置(n指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存在的元素的hash值以及key是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。JDK 1.8之前的hash方法如下:
1 | static int hash(int h) { |
存储结构如下:
所谓 “拉链法” 就是将链表和数组相结合。也就是说创建⼀个链表数组,数组中每⼀格就是⼀个链表。若遇到哈希冲突,则将冲突的值加到链表中即可