数组长度为16时,有两个keyA和keyB 。
KeyA:n-1:0000 0000 0000 0000 0000 0000 0000 1111hash1: 1111 1111 1111 1111 0000 1111 0000 0101&结果:0000 0000 0000 0000 0000 0000 0000 0101 = 5KeyB:n-1:0000 0000 0000 0000 0000 0000 0000 1111 hash1: 1111 1111 1111 1111 0000 1111 0001 0101&结果:0000 0000 0000 0000 0000 0000 0000 0101 = 5
在数组长度为16的时候,他们两个hash值冲突会使用拉链发解决冲突 。
当数组长度扩容到32之后,需要重新对每个hash值进行寻址,也就是每个hash值跟新的数组length-1 进行操作 。
KeyA:n-1:0000 0000 0000 0000 0000 0000 000*1* 1111hash1: 1111 1111 1111 1111 0000 1111 0000 0101&结果:0000 0000 0000 0000 0000 0000 0000 0101 = 5KeyB:n-1:0000 0000 0000 0000 0000 000*1* 0000 1111 hash1: 1111 1111 1111 1111 0000 1111 0001 0101&结果:0000 0000 0000 0000 0000 000*1* 0000 0101 = 21
判断二进制结果是否多出一个bit的1,如果没有多,那就用原来的index,如果多出来了那就用index+oldCap,通过这个方式,避免了rehash的时候,用每个hash对新数组的length取模,取模性能不高,位运算性能比较高 。
推荐阅读
- 如何利用Kurukshetra以交互式的方式学习如何进行安全编码
- Spring Cloud Gateway提供的简易网关实现方式,你使用过吗?
- 贮存山药的简便方法 怎么贮存山药
- 李佳琦:更大的危机!
- 2023年“口碑最好的10部电影”,《长安三万里》第6,《怪物》第2
- 买电动车48V和60V的区别有多大?有人买60V的后悔?行内人说实话
- 不用摇号,买车带京牌?记者求证:热炒的“小专车”暗藏风险
- 买红薯时,挑“细长”还是“粗圆”?
- 预制菜:底层穷人的饲料!
- 灰色丝绒连衣裙:秋季最高大上的穿搭之一,优雅又舒适,穿出气质