hashMap原理

hashMap在1.7之前使用的数据结构是数组加链表的结构,在1.7之后使用的是数组加链表加红黑树的原理。

1.为什么使用红黑树

因为在1.8之前使用的是hashmap不是线程安全的,并且entry的插入使用的是尾插发,这就导致会出现死循环的问题。所有使用了红黑树。

正常场景下的扩容

我们先来看下单线程情况下,正常的rehash过程

1、假设我们的hash算法是简单的key mod一下表的大小(即数组的长度)。

2、最上面是old hash表,其中HASH表的size=2,所以key=3,5,7在mod 2 以后都冲突在table[1]这个位置上了。

3、接下来HASH表扩容,resize=4,然后所有的重新进行散列分布,过程如下:

你可能感兴趣的:(hashMap原理)