zoukankan      html  css  js  c++  java
  • HashMap resize方法的理解(一)

    对于oldTable中存储的为15、7、4、5、8、1,长度为8的一个数组中,存储位置如下

    0

    1

    2

    3

    4

    5

    6

    7

    8

    1

    4

    5

    15

    7

    当扩容到一倍后,对于新的位置的选择通过e.hash & oldCap 确认其在新的数组中的位置,

    如:

    8:1000 与原来长度8:1000相与后,为1,则在新的数组中的位置,为原位置加上原数组长度即可。避免了重新计算数组位置。

    对于7:111与原长度8:1000相与后,为0,表示其在新数组中的位置是不变的,仍在在7的位置上。

    在求新数组的位置时,其仅是最高位上增加了1而已,与原数组长度最高位是一致的,忽略低位信息,可以直接判断出其在原数组中是否已经超过了本身的长度,形成了数据链。

    最后在新的空间中存储如下:

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    1

    4

    5

    7

    8

    15

  • 相关阅读:
    1048 石子归并
    高精度算法小结
    3117 高精度练习之乘法
    UVa 11809
    3115 高精度练习之减法
    3116 高精度练习之加法
    “da shen” in my heart
    爱是怀疑!
    普通disco
    崇拜
  • 原文地址:https://www.cnblogs.com/woniu4/p/8301099.html
Copyright © 2011-2022 走看看