HashMap扩容:两倍扩容,底层为数组,当数组满了之后,会自动扩容。
扩容:扩大数组长度,对原数组进行rehash操作,把原数组copy到新数组中
问题:假设16数组中[<>]同一个位置存放了多对key-value,当扩容为32位时,其中某对或多对key-value发生了位置的变动。
扩容后,要进行rehash重新将hash值与n-1进行与运算。如下
数组长度=16
n-1 0000 0000 0000 0000 0000 0000 0000 1111
hash1 1111 1111 1111 1111 0000 1111 0000 0101
&结果 0000 0000 0000 0000 0000 0000 0000 0101
&结果=5(index为5的位置)
n-1 0000 0000 0000 0000 0000 0000 0000 1111
hash2 1111 1111 1111 1111 0000 1111 0001 0101
&结果 0000 0000 0000 0000 0000 0000 0000 0101
&结果=5(index为5的位置)
在数组长度为16的时候,两个hash值的位置是一样的,用链表来进行处理,出现一个hash冲突的问题
如果数组长度扩容之后为32,