@@ -116,7 +116,7 @@
< path
d = "M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75H192 160 64c-35.3 0-64 28.7-64 64v96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V352l8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V300.4c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4V32zm-64 76.7V240 371.3C357.2 317.8 280.5 288 200.7 288H192V192h8.7c79.8 0 156.5-29.8 215.3-83.3z" / >
< / svg >
< span > 纸质书已发布,详情请见< a href = "/chapter_paperbook/" > 纸质书介绍 < / a > < / span >
< span > 纸质书已发布,详情请见< a href = "/chapter_paperbook/" > 这里 < / a > < / span >
< / div >
< / div >
@@ -3530,7 +3530,7 @@
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > <!-- ! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --> < path d = "M96 0C43 0 0 43 0 96v320c0 53 43 96 96 96h320c17.7 0 32-14.3 32-32s-14.3-32-32-32v-64c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H96zm0 384h256v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16zm16 48h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16z" / > < / svg >
< span class = "md-ellipsis" >
纸质书介绍
纸质书
< / span >
@@ -3549,7 +3549,7 @@
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_19_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_19" >
< span class = "md-nav__icon md-icon" > < / span >
纸质书介绍
纸质书
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
@@ -5497,132 +5497,116 @@
< a id = "__codelineno-16-4" name = "__codelineno-16-4" href = "#__codelineno-16-4" > < / a > < span class = "w" > < / span > < span class = "nx" > capacity< / span > < span class = "w" > < / span > < span class = "kt" > int< / span > < span class = "w" > < / span > < span class = "c1" > // 哈希表容量< / span >
< a id = "__codelineno-16-5" name = "__codelineno-16-5" href = "#__codelineno-16-5" > < / a > < span class = "w" > < / span > < span class = "nx" > loadThres< / span > < span class = "w" > < / span > < span class = "kt" > float64< / span > < span class = "w" > < / span > < span class = "c1" > // 触发扩容的负载因子阈值< / span >
< a id = "__codelineno-16-6" name = "__codelineno-16-6" href = "#__codelineno-16-6" > < / a > < span class = "w" > < / span > < span class = "nx" > extendRatio< / span > < span class = "w" > < / span > < span class = "kt" > int< / span > < span class = "w" > < / span > < span class = "c1" > // 扩容倍数< / span >
< a id = "__codelineno-16-7" name = "__codelineno-16-7" href = "#__codelineno-16-7" > < / a > < span class = "w" > < / span > < span class = "nx" > buckets< / span > < span class = "w" > < / span > < span class = "p" > []< / span > < span class = "nx" > pair< / span > < span class = "w" > < / span > < span class = "c1" > // 桶数组< / span >
< a id = "__codelineno-16-8" name = "__codelineno-16-8" href = "#__codelineno-16-8" > < / a > < span class = "w" > < / span > < span class = "nx" > removed < / span > < span class = "w" > < / span > < span class = "nx" > pair< / span > < span class = "w" > < / span > < span class = "c1" > // 删除标记< / span >
< a id = "__codelineno-16-7" name = "__codelineno-16-7" href = "#__codelineno-16-7" > < / a > < span class = "w" > < / span > < span class = "nx" > buckets< / span > < span class = "w" > < / span > < span class = "p" > []< / span > < span class = "o" > *< / span > < span class = "nx" > pair< / span > < span class = "w" > < / span > < span class = "c1" > // 桶数组< / span >
< a id = "__codelineno-16-8" name = "__codelineno-16-8" href = "#__codelineno-16-8" > < / a > < span class = "w" > < / span > < span class = "nx" > TOMBSTONE < / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > pair< / span > < span class = "w" > < / span > < span class = "c1" > // 删除标记< / span >
< a id = "__codelineno-16-9" name = "__codelineno-16-9" href = "#__codelineno-16-9" > < / a > < span class = "p" > }< / span >
< a id = "__codelineno-16-10" name = "__codelineno-16-10" href = "#__codelineno-16-10" > < / a >
< a id = "__codelineno-16-11" name = "__codelineno-16-11" href = "#__codelineno-16-11" > < / a > < span class = "cm" > /* 构造方法 */< / span >
< a id = "__codelineno-16-12" name = "__codelineno-16-12" href = "#__codelineno-16-12" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "nx" > newHashMapOpenAddressing< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-13" name = "__codelineno-16-13" href = "#__codelineno-16-13" > < / a > < span class = "w" > < / span > < span class = "nx " > buckets < / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nb" > make< / span > < span class = "p" > ([]< / span > < span class = "nx" > pair< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "mi" > 4 < / span > < span class = "p" > ) < / span >
< a id = "__codelineno-16-14" name = "__codelineno-16-14" href = "#__codelineno-16-14" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span > < span class = "w " > < / span > < span class = "o " > & < / span > < span class = "nx " > hashMapOpenAddressing < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-15" name = "__codelineno-16-15" href = "#__codelineno-16-15" > < / a > < span class = "w" > < / span > < span class = "nx" > size < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "mi" > 0 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-16-16" name = "__codelineno-16-16" href = "#__codelineno-16-16" > < / a > < span class = "w" > < / span > < span class = "nx" > capacity < / span > < span class = "p " > : < / span > < span class = "w" > < / span > < span class = "mi " > 4 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-16-17" name = "__codelineno-16-17" href = "#__codelineno-16-17" > < / a > < span class = "w" > < / span > < span class = "nx" > loadThres < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "mf " > 2.0< / span > < span class = "w" > < / span > < span class = "o" > /< / span > < span class = "w" > < / span > < span class = "mf" > 3.0 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-16-18" name = "__codelineno-16-18" href = "#__codelineno-16-18" > < / a > < span class = "w" > < / span > < span class = "nx" > extendRatio < / span > < span class = "p" > : < / span > < span class = "w" > < / span > < span class = "mi" > 2 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-16-19" name = "__codelineno-16-19" href = "#__codelineno-16-19" > < / a > < span class = "w" > < / span > < span class = "nx" > buckets < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "nx" > buckets< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-16-20" name = "__codelineno-16-20" href = "#__codelineno-16-20" > < / a > < span class = "w" > < / span > < span class = "nx" > removed< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "nx" > pair< / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-21" name = "__codelineno-16-21" href = "#__codelineno-16-21" > < / a > < span class = "w" > < / span > < span class = "nx" > key< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > , < / span >
< a id = "__codelineno-16-22" name = "__codelineno-16-22" href = "#__codelineno-16-22" > < / a > < span class = "w" > < / span > < span class = "nx" > val< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s" > " -1" < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-16-23" name = "__codelineno-16-23" href = "#__codelineno-16-23" > < / a > < span class = "w " > < / span > < span class = "p" > }, < / span >
< a id = "__codelineno-16-24" name = "__codelineno-16-24" href = "#__codelineno-16-24" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-25" name = "__codelineno-16-25" href = "#__codelineno-16-25" > < / a > < span class = "p" > } < / span >
< a id = "__codelineno-16-26" name = "__codelineno-16-26" href = "#__codelineno-16-26" > < / a >
< a id = "__codelineno-16-27" name = "__codelineno-16-27" href = "#__codelineno-16-27" > < / a > < span class = "cm" > /* 哈希函数 */< / span >
< a id = "__codelineno-16-28" name = "__codelineno-16-28" href = "#__codelineno-16-28" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx" > hashFunc< / span > < span class = "p" > (< / span > < span class = "nx" > key< / span > < span class = "w" > < / span > < span class = "kt" > int< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "kt" > int< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-29" name = "__codelineno-16-29" href = "#__codelineno-16-29" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span > < span class = "w" > < / span > < span class = "nx " > key < / span > < span class = "w " > < / span > < span class = "o " > % < / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > . < / span > < span class = "nx" > capacity < / span >
< a id = "__codelineno-16-30" name = "__codelineno-16-30" href = "#__codelineno-16-30" > < / a > < span class = "p" > } < / span >
< a id = "__codelineno-16-31" name = "__codelineno-16-31" href = "#__codelineno-16-31" > < / a >
< a id = "__codelineno-16-32" name = "__codelineno-16-32" href = "#__codelineno-16-32" > < / a > < span class = "cm" > /* 负载因子 */< / span >
< a id = "__codelineno-16-33" name = "__codelineno-16-33" href = "#__codelineno-16-33" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx" > loadFactor< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "kt" > float64< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-34" name = "__codelineno-16-34" href = "#__codelineno-16-34" > < / a > < span class = "w " > < / span > < span class = "k " > return < / span > < span class = "w " > < / span > < span class = "nb " > float64 < / span > < span class = "p " > ( < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > size < / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "o " > / < / span > < span class = "w" > < / span > < span class = "nb " > float64 < / span > < span class = "p" > ( < / span > < span class = "nx " > m < / span > < span class = "p " > . < / span > < span class = "nx " > capacity < / span > < span class = "p" > ) < / span >
< a id = "__codelineno-16-35" name = "__codelineno-16-35" href = "#__codelineno-16-35" > < / a > < span class = "p" > } < / span >
< a id = "__codelineno-16-36" name = "__codelineno-16-36" href = "#__codelineno-16-36" > < / a >
< a id = "__codelineno-16-37" name = "__codelineno-16-37" href = "#__codelineno-16-37" > < / a > < span class = "cm" > /* 查询操作 */ < / span >
< a id = "__codelineno-16-38" name = "__codelineno-16-38" href = "#__codelineno-16-38" > < / a > < span class = "kd " > func < / span > < span class = "w " > < / span > < span class = "p " > ( < / span > < span class = "nx" > m < / span > < span class = "w" > < / span > < span class = "o " > * < / span > < span class = "nx" > hashMapOpenAddressing < / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx" > get < / span > < span class = "p" > ( < / span > < span class = "nx" > key< / span > < span class = "w" > < / span > < span class = "kt " > int< / span > < span class = "p" > ) < / span > < span class = "w" > < / span > < span class = "kt " > string < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-39" name = "__codelineno-16-39" href = "#__codelineno-16-39" > < / a > < span class = "w" > < / span > < span class = "nx " > idx < / span > < span class = "w" > < / span > < span class = "o " > := < / span > < span class = "w" > < / span > < span class = "nx " > m < / span > < span class = "p " > . < / span > < span class = "nx " > hashFunc < / span > < span class = "p " > ( < / span > < span class = "nx " > key < / span > < span class = "p" > ) < / span >
< a id = "__codelineno-16-40" name = "__codelineno-16-40" href = "#__codelineno-16-40" > < / a > < span class = "w" > < / span > < span class = "c1" > // 线性探测,从 index 开始向后遍历 < / span >
< a id = "__codelineno-16-41" name = "__codelineno-16-41" href = "#__codelineno-16-41" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > i < / span > < span class = "w " > < / span > < span class = "o " > :=< / span > < span class = "w" > < / span > < span class = "mi " > 0 < / span > < span class = "p " > ;< / span > < span class = "w" > < / span > < span class = "nx " > i < / span > < span class = "w" > < / span > < span class = "p" > < < / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > capacity < / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "o" > ++< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-42" name = "__codelineno-16-42" href = "#__codelineno-16-42" > < / a > < span class = "w" > < / span > < span class = "c1" > // 计算桶索引,越过尾部则返回头部 < / span >
< a id = "__codelineno-16-43" name = "__codelineno-16-43" href = "#__codelineno-16-43" > < / a > < span class = "w" > < / span > < span class = "nx" > j< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > idx< / span > < span class = "w " > < / span > < span class = "o" > + < / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "p" > ) < / span > < span class = "w" > < / span > < span class = "o" > %< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > capacity < / span >
< a id = "__codelineno-16-44" name = "__codelineno-16-44" href = "#__codelineno-16-44" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 若遇到空桶,说明无此 key ,则返回 null < / span >
< a id = "__codelineno-16-45" name = "__codelineno-16-45" href = "#__codelineno-16-45" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p " > .< / span > < span class = "nx" > buckets < / span > < span class = "p " > [ < / span > < span class = "nx" > j< / span > < span class = "p" > ] < / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > pair< / span > < span class = "p" > {})< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-46" name = "__codelineno-16-46" href = "#__codelineno-16-46" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "s" > " " < / span >
< a id = "__codelineno-16-47" name = "__codelineno-16-47" href = "#__codelineno-16-47" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-48" name = "__codelineno-16-48" href = "#__codelineno-16-48" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若遇到指定 key ,则返回对应 val < / span >
< a id = "__codelineno-16-49" name = "__codelineno-16-49" href = "#__codelineno-16-49" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > j< / span > < span class = "p" > ].< / span > < span class = "nx" > key< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "nx" > key< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > j< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > removed< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-50" name = "__codelineno-16-50" href = "#__codelineno-16-50" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > . < / span > < span class = "nx " > buckets < / span > < span class = "p " > [ < / span > < span class = "nx" > j < / span > < span class = "p" > ] .< / span > < span class = "nx" > val < / span >
< a id = "__codelineno-16-51" name = "__codelineno-16-51" href = "#__codelineno-16-51" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-52" name = "__codelineno-16-52" href = "#__codelineno-16-52" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-16-53" name = "__codelineno-16-53" href = "#__codelineno-16-53" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若未找到 key ,则返回空字符串 < / span >
< a id = "__codelineno-16-54" name = "__codelineno-16-54" href = "#__codelineno-16-54" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "s " > " " < / span >
< a id = "__codelineno-16-55" name = "__codelineno-16-55" href = "#__codelineno-16-55" > < / a > < span class = "p" > }< / span >
< a id = "__codelineno-16-56" name = "__codelineno-16-56" href = "#__codelineno-16-56" > < / a >
< a id = "__codelineno-16-57" name = "__codelineno-16-57" href = "#__codelineno-16-57" > < / a > < span class = "cm " > /* 添加操作 */ < / span >
< a id = "__codelineno-16-58" name = "__codelineno-16-58" href = "#__codelineno-16-58" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx" > put< / span > < span class = "p" > (< / span > < span class = "nx" > key< / span > < span class = "w" > < / span > < span class = "kt" > int< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > val< / span > < span class = "w" > < / span > < span class = "kt" > string< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-59" name = "__codelineno-16-59" href = "#__codelineno-16-59" > < / a > < span class = "w " > < / span > < span class = "c1" > // 当负载因子超过阈值时,执行扩容 < / span >
< a id = "__codelineno-16-60" name = "__codelineno-16-60" href = "#__codelineno-16-60" > < / a > < span class = "w " > < / span > < span class = "k " > if < / span > < span class = "w " > < / span > < span class = "nx" > m < / span > < span class = "p " > . < / span > < span class = "nx" > loadFactor < / span > < span class = "p" > ( )< / span > < span class = "w" > < / span > < span class = "p " > > < / span > < span class = "w " > < / span > < span class = "nx" > m < / span > < span class = "p " > . < / span > < span class = "nx" > loadThres < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-61" name = "__codelineno-16-61" href = "#__codelineno-16-61" > < / a > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > extend < / span > < span class = "p" > () < / span >
< a id = "__codelineno-16-62" name = "__codelineno-16-62" href = "#__codelineno-16-62" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-63" name = "__codelineno-16-63" href = "#__codelineno-16-63" > < / a > < span class = "w" > < / span > < span class = "nx " > idx < / span > < span class = "w" > < / span > < span class = "o " > := < / span > < span class = "w " > < / span > < span class = "nx" > m < / span > < span class = "p" > . < / span > < span class = "nx" > hashFunc < / span > < span class = "p" > ( < / span > < span class = "nx" > key < / span > < span class = "p" > ) < / span >
< a id = "__codelineno-16-64" name = "__codelineno-16-64" href = "#__codelineno-16-64" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 线性探测,从 index 开始向后遍历 < / span >
< a id = "__codelineno-16-65" name = "__codelineno-16-65" href = "#__codelineno-16-65" > < / a > < span class = "w" > < / span > < span class = "k" > for < / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "w" > < / span > < span class = "p" > < < / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > capacity< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "o" > ++< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-66" name = "__codelineno-16-66" href = "#__codelineno-16-66" > < / a > < span class = "w" > < / span > < span class = "c1" > // 计算桶索引,越过尾部则返回头部 < / span >
< a id = "__codelineno-16-67" name = "__codelineno-16-67" href = "#__codelineno-16-67" > < / a > < span class = "w" > < / span > < span class = "nx" > j< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > idx< / span > < span class = "w" > < / span > < span class = "o" > +< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "o" > %< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > capacity< / span >
< a id = "__codelineno-16-68" name = "__codelineno-16-68" href = "#__codelineno-16-68" > < / a > < span class = "w " > < / span > < span class = "c1" > // 若遇到空桶、或带有删除标记的桶,则将键值对放入该桶 < / span >
< a id = "__codelineno-16-69" name = "__codelineno-16-69" href = "#__codelineno-16-69" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > buckets < / span > < span class = "p" > [ < / span > < span class = "nx" > j< / span > < span class = "p" > ] < / span > < span class = "w" > < / span > < span class = "o" > == < / span > < span class = "w " > < / span > < span class = "p" > (< / span > < span class = "nx" > pair < / span > < span class = "p" > {} )< / span > < span class = "w" > < / span > < span class = "o" > ||< / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > . < / span > < span class = "nx" > buckets < / span > < span class = "p " > [ < / span > < span class = "nx " > j < / span > < span class = "p" > ] < / span > < span class = "w" > < / span > < span class = "o " > == < / span > < span class = "w" > < / span > < span class = "nx " > m< / span > < span class = "p" > . < / span > < span class = "nx " > removed < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-70" name = "__codelineno-16-70" href = "#__codelineno-16-70" > < / a > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > buckets < / span > < span class = "p" > [ < / span > < span class = "nx " > j < / span > < span class = "p" > ] < / span > < span class = "w" > < / span > < span class = "p " > = < / span > < span class = "w " > < / span > < span class = "nx" > pair < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-71" name = "__codelineno-16-71" href = "#__codelineno-16-71" > < / a > < span class = "w" > < / span > < span class = "nx" > key < / span > < span class = "p" > : < / span > < span class = "w " > < / span > < span class = "nx " > key < / span > < span class = "p" > , < / span >
< a id = "__codelineno-16-72" name = "__codelineno-16-72" href = "#__codelineno-16-72" > < / a > < span class = "w" > < / span > < span class = "nx" > val< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "nx" > val< / span > < span class = "p" > , < / span >
< a id = "__codelineno-16-73" name = "__codelineno-16-73" href = "#__codelineno-16-73" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-74" name = "__codelineno-16-74" href = "#__codelineno-16-74" > < / a > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > size< / span > < span class = "w" > < / span > < span class = "o" > += < / span > < span class = "w" > < / span > < span class = "mi " > 1 < / span >
< a id = "__codelineno-16-75" name = "__codelineno-16-75" href = "#__codelineno-16-75" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span >
< a id = "__codelineno-16-76" name = "__codelineno-16-76" href = "#__codelineno-16-76" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-77" name = "__codelineno-16-77" href = "#__codelineno-16-77" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 若遇到指定 key ,则更新对应 val < / span >
< a id = "__codelineno-16-78" name = "__codelineno-16-78" href = "#__codelineno-16-78" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > j < / span > < span class = "p" > ].< / span > < span class = "nx" > key < / span > < span class = "w" > < / span > < span class = "o " > == < / span > < span class = "w" > < / span > < span class = "nx" > key < / span > < span class = "w" > < / span > < span class = "p " > { < / span >
< a id = "__codelineno-16-79" name = "__codelineno-16-79" href = "#__codelineno-16-79" > < / a > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > j< / span > < span class = "p" > ].< / span > < span class = "nx" > val< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "nx" > val < / span >
< a id = "__codelineno-16-80" name = "__codelineno-16-80" href = "#__codelineno-16-80" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span >
< a id = "__codelineno-16-81" name = "__codelineno-16-81" href = "#__codelineno-16-81" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-82" name = "__codelineno-16-82" href = "#__codelineno-16-82" > < / a > < span class = "w " > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-83" name = "__codelineno-16-83" href = "#__codelineno-16-83" > < / a > < span class = "p" > } < / span >
< a id = "__codelineno-16-84" name = "__codelineno-16-84" href = "#__codelineno-16-84" > < / a >
< a id = "__codelineno-16-85" name = "__codelineno-16-85" href = "#__codelineno-16-85" > < / a > < span class = "cm" > /* 删除操作 */ < / span >
< a id = "__codelineno-16-86" name = "__codelineno-16-86" href = "#__codelineno-16-86" > < / a > < span class = "kd " > func < / span > < span class = "w " > < / span > < span class = "p" > ( < / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "o " > * < / span > < span class = "nx" > hashMapOpenAddressing < / span > < span class = "p" > ) < / span > < span class = "w" > < / span > < span class = "nx " > remove < / span > < span class = "p " > ( < / span > < span class = "nx" > key < / span > < span class = "w " > < / span > < span class = "kt" > int< / span > < span class = "p" > ) < / span > < span class = "w" > < / span > < span class = "p " > { < / span >
< a id = "__codelineno-16-87" name = "__codelineno-16-87" href = "#__codelineno-16-87" > < / a > < span class = "w" > < / span > < span class = "nx" > idx< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > hashFunc< / span > < span class = "p" > (< / span > < span class = "nx" > key < / span > < span class = "p " > ) < / span >
< a id = "__codelineno-16-88" name = "__codelineno-16-88" href = "#__codelineno-16-88" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 遍历桶,从中删除键值对 < / span >
< a id = "__codelineno-16-89" name = "__codelineno-16-89" href = "#__codelineno-16-89" > < / a > < span class = "w" > < / span > < span class = "c1" > // 线性探测,从 index 开始向后遍历 < / span >
< a id = "__codelineno-16-90" name = "__codelineno-16-90" href = "#__codelineno-16-90" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "w" > < / span > < span class = "p" > < < / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > capacity< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "nx" > i< / span > < span class = "o" > ++< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-91" name = "__codelineno-16-91" href = "#__codelineno-16-91" > < / a > < span class = "w" > < / span > < span class = "c1" > // 计算桶索引,越过尾部则返回头部 < / span >
< a id = "__codelineno-16-92" name = "__codelineno-16-92" href = "#__codelineno-16-92" > < / a > < span class = "w " > < / span > < span class = "nx" > j< / span > < span class = "w" > < / span > < span class = "o" > := < / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > idx < / span > < span class = "w" > < / span > < span class = "o" > + < / span > < span class = "w " > < / span > < span class = "nx" > i < / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "o " > %< / span > < span class = "w" > < / span > < span class = "nx " > m < / span > < span class = "p " > . < / span > < span class = "nx " > capacity < / span >
< a id = "__codelineno-16-93" name = "__codelineno-16-93" href = "#__codelineno-16-93" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若遇到空桶,说明无此 key ,则直接返回 < / span >
< a id = "__codelineno-16-94" name = "__codelineno-16-94" href = "#__codelineno-16-94" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [ < / span > < span class = "nx " > j < / span > < span class = "p " > ] < / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w " > < / span > < span class = "p" > ( < / span > < span class = "nx" > pair< / span > < span class = "p" > {}) < / span > < span class = "w" > < / span > < span class = "p " > { < / span >
< a id = "__codelineno-16-95" name = "__codelineno-16-95" href = "#__codelineno-16-95" > < / a > < span class = "w" > < / span > < span class = "k" > return < / span >
< a id = "__codelineno-16-96" name = "__codelineno-16-96" href = "#__codelineno-16-96" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-97" name = "__codelineno-16-97" href = "#__codelineno-16-97" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若遇到指定 key ,则标记删除并返回 < / span >
< a id = "__codelineno-16-98" name = "__codelineno-16-98" href = "#__codelineno-16-98" > < / a > < span class = "w" > < / span > < span class = "k" > i f< / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > . < / span > < span class = "nx " > buckets< / span > < span class = "p" > [ < / span > < span class = "nx" > j < / span > < span class = "p " > ]. < / span > < span class = "nx " > key < / span > < span class = "w" > < / span > < span class = "o " > == < / span > < span class = "w" > < / span > < span class = "nx" > key < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-99" name = "__codelineno-16-99" href = "#__codelineno-16-99" > < / a > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p " > . < / span > < span class = "nx " > buckets < / span > < span class = "p " > [ < / span > < span class = "nx" > j< / span > < span class = "p " > ] < / span > < span class = "w" > < / span > < span class = "p " > =< / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > removed < / span >
< a id = "__codelineno-16-100" name = "__codelineno-16-100" href = "#__codelineno-16-100" > < / a > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > size < / span > < span class = "w" > < / span > < span class = "o " > -= < / span > < span class = "w " > < / span > < span class = "mi " > 1 < / span >
< a id = "__codelineno-16-13" name = "__codelineno-16-13" href = "#__codelineno-16-13" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-14" name = "__codelineno-16-14" href = "#__codelineno-16-14" > < / a > < span class = "w" > < / span > < span class = "nx " > size < / span > < span class = "p " > : < / span > < span class = "w " > < / span > < span class = "mi " > 0 < / span > < span class = "p" > , < / span >
< a id = "__codelineno-16-15" name = "__codelineno-16-15" href = "#__codelineno-16-15" > < / a > < span class = "w" > < / span > < span class = "nx" > capacity < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "mi" > 4 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-16-16" name = "__codelineno-16-16" href = "#__codelineno-16-16" > < / a > < span class = "w" > < / span > < span class = "nx" > loadThres< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "mf " > 2.0 < / span > < span class = "w" > < / span > < span class = "o" > /< / span > < span class = "w" > < / span > < span class = "mf " > 3.0 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-16-17" name = "__codelineno-16-17" href = "#__codelineno-16-17" > < / a > < span class = "w" > < / span > < span class = "nx" > extendRatio < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "mi " > 2< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-16-18" name = "__codelineno-16-18" href = "#__codelineno-16-18" > < / a > < span class = "w" > < / span > < span class = "nx" > buckets< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "nb" > make< / span > < span class = "p" > ([]< / span > < span class = "o" > *< / span > < span class = "nx" > pair < / span > < span class = "p" > , < / span > < span class = "w" > < / span > < span class = "mi" > 4 < / span > < span class = "p" > ) ,< / span >
< a id = "__codelineno-16-19" name = "__codelineno-16-19" href = "#__codelineno-16-19" > < / a > < span class = "w" > < / span > < span class = "nx" > TOMBSTONE < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "nx" > pair< / span > < span class = "p" > {< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "s" > " -1" < / span > < span class = "p" > } ,< / span >
< a id = "__codelineno-16-20" name = "__codelineno-16-20" href = "#__codelineno-16-20" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-21" name = "__codelineno-16-21" href = "#__codelineno-16-21" > < / a > < span class = "p" > } < / span >
< a id = "__codelineno-16-22" name = "__codelineno-16-22" href = "#__codelineno-16-22" > < / a >
< a id = "__codelineno-16-23" name = "__codelineno-16-23" href = "#__codelineno-16-23" > < / a > < span class = "cm " > /* 哈希函数 */ < / span >
< a id = "__codelineno-16-24" name = "__codelineno-16-24" href = "#__codelineno-16-24" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > h< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx" > hashFunc< / span > < span class = "p" > (< / span > < span class = "nx" > key< / span > < span class = "w" > < / span > < span class = "kt" > int< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "kt" > int< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-25" name = "__codelineno-16-25" href = "#__codelineno-16-25" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "nx" > key< / span > < span class = "w" > < / span > < span class = "o" > %< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > capacity< / span > < span class = "w" > < / span > < span class = "c1" > // 根据键计算哈希值 < / span >
< a id = "__codelineno-16-26" name = "__codelineno-16-26" href = "#__codelineno-16-26" > < / a > < span class = "p" > }< / span >
< a id = "__codelineno-16-27" name = "__codelineno-16-27" href = "#__codelineno-16-27" > < / a >
< a id = "__codelineno-16-28" name = "__codelineno-16-28" href = "#__codelineno-16-28" > < / a > < span class = "cm" > /* 负载因子 */ < / span >
< a id = "__codelineno-16-29" name = "__codelineno-16-29" href = "#__codelineno-16-29" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "p" > ( < / span > < span class = "nx " > h < / span > < span class = "w" > < / span > < span class = "o " > * < / span > < span class = "nx " > hashMapOpenAddressing < / span > < span class = "p " > ) < / span > < span class = "w" > < / span > < span class = "nx" > loadFactor < / span > < span class = "p" > () < / span > < span class = "w" > < / span > < span class = "kt" > float64< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-30" name = "__codelineno-16-30" href = "#__codelineno-16-30" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "nb" > float64< / span > < span class = "p" > (< / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > size< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "o" > /< / span > < span class = "w" > < / span > < span class = "nb" > float64< / span > < span class = "p" > (< / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > capacity< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "c1" > // 计算当前负载因子 < / span >
< a id = "__codelineno-16-31" name = "__codelineno-16-31" href = "#__codelineno-16-31" > < / a > < span class = "p" > }< / span >
< a id = "__codelineno-16-32" name = "__codelineno-16-32" href = "#__codelineno-16-32" > < / a >
< a id = "__codelineno-16-33" name = "__codelineno-16-33" href = "#__codelineno-16-33" > < / a > < span class = "cm" > /* 搜索 key 对应的桶索引 */ < / span >
< a id = "__codelineno-16-34" name = "__codelineno-16-34" href = "#__codelineno-16-34" > < / a > < span class = "kd " > func < / span > < span class = "w " > < / span > < span class = "p " > ( < / span > < span class = "nx " > h< / span > < span class = "w" > < / span > < span class = "o " > * < / span > < span class = "nx" > hashMapOpenAddressing < / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx" > findBucket< / span > < span class = "p" > (< / span > < span class = "nx " > key < / span > < span class = "w" > < / span > < span class = "kt " > int < / span > < span class = "p" > ) < / span > < span class = "w " > < / span > < span class = "kt " > int < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-35" name = "__codelineno-16-35" href = "#__codelineno-16-35" > < / a > < span class = "w" > < / span > < span class = "nx" > index< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > hashFunc< / span > < span class = "p" > (< / span > < span class = "nx" > key< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "c1" > // 获取初始索引 < / span >
< a id = "__codelineno-16-36" name = "__codelineno-16-36" href = "#__codelineno-16-36" > < / a > < span class = "w" > < / span > < span class = "nx" > firstTombstone< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "w" > < / span > < span class = "c1" > // 记录遇到的第一个TOMBSTONE的位置< / span >
< a id = "__codelineno-16-37" name = "__codelineno-16-37" href = "#__codelineno-16-37" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "kc" > nil< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-38" name = "__codelineno-16-38" href = "#__codelineno-16-38" > < / a > < span class = "w " > < / span > < span class = "k " > if < / span > < span class = "w " > < / span > < span class = "nx" > h < / span > < span class = "p " > . < / span > < span class = "nx" > buckets < / span > < span class = "p" > [ < / span > < span class = "nx" > index < / span > < span class = "p" > ]. < / span > < span class = "nx" > key< / span > < span class = "w" > < / span > < span class = "o " > == < / span > < span class = "w" > < / span > < span class = "nx " > key < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-39" name = "__codelineno-16-39" href = "#__codelineno-16-39" > < / a > < span class = "w" > < / span > < span class = "k " > if < / span > < span class = "w" > < / span > < span class = "nx " > firstTombstone < / span > < span class = "w" > < / span > < span class = "o " > != < / span > < span class = "w " > < / span > < span class = "o " > - < / span > < span class = "mi " > 1 < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-40" name = "__codelineno-16-40" href = "#__codelineno-16-40" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若之前遇到了删除标记,则将键值对移动至该索引处 < / span >
< a id = "__codelineno-16-41" name = "__codelineno-16-41" href = "#__codelineno-16-41" > < / a > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p " > . < / span > < span class = "nx " > buckets < / span > < span class = "p " > [ < / span > < span class = "nx " > firstTombstone < / span > < span class = "p " > ] < / span > < span class = "w" > < / span > < span class = "p" > = < / span > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > buckets < / span > < span class = "p" > [< / span > < span class = "nx" > index < / span > < span class = "p" > ] < / span >
< a id = "__codelineno-16-42" name = "__codelineno-16-42" href = "#__codelineno-16-42" > < / a > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > TOMBSTONE < / span >
< a id = "__codelineno-16-43" name = "__codelineno-16-43" href = "#__codelineno-16-43" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span > < span class = "w" > < / span > < span class = "nx" > firstTombstone < / span > < span class = "w" > < / span > < span class = "c1" > // 返回移动后的桶索引 < / span >
< a id = "__codelineno-16-44" name = "__codelineno-16-44" href = "#__codelineno-16-44" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-16-45" name = "__codelineno-16-45" href = "#__codelineno-16-45" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span > < span class = "w " > < / span > < span class = "nx" > index < / span > < span class = "w" > < / span > < span class = "c1" > // 返回找到的索引 < / span >
< a id = "__codelineno-16-46" name = "__codelineno-16-46" href = "#__codelineno-16-46" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-47" name = "__codelineno-16-47" href = "#__codelineno-16-47" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > firstTombstone< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-48" name = "__codelineno-16-48" href = "#__codelineno-16-48" > < / a > < span class = "w" > < / span > < span class = "nx" > firstTombstone< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "nx" > index< / span > < span class = "w" > < / span > < span class = "c1" > // 记录遇到的首个删除标记的位置 < / span >
< a id = "__codelineno-16-49" name = "__codelineno-16-49" href = "#__codelineno-16-49" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-50" name = "__codelineno-16-50" href = "#__codelineno-16-50" > < / a > < span class = "w" > < / span > < span class = "nx" > index< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx "> index < / span > < span class = "w" > < / span > < span class = "o" > +< / span > < span class = "w" > < / span > < span class = "mi" > 1 < / span > < span class = "p" > ) < / span > < span class = "w " > < / span > < span class = "o" > % < / span > < span class = "w " > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > capacity< / span > < span class = "w" > < / span > < span class = "c1" > // 线性探测,越过尾部则返回头部 < / span >
< a id = "__codelineno-16-51" name = "__codelineno-16-51" href = "#__codelineno-16-51" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-52" name = "__codelineno-16-52" href = "#__codelineno-16-52" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 若 key 不存在,则返回添加点的索引 < / span >
< a id = "__codelineno-16-53" name = "__codelineno-16-53" href = "#__codelineno-16-53" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > firstTombstone< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-54" name = "__codelineno-16-54" href = "#__codelineno-16-54" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "nx " > firstTombstone < / span >
< a id = "__codelineno-16-55" name = "__codelineno-16-55" href = "#__codelineno-16-55" > < / a > < span class = "w" > < / span > < span class = " p" > }< / span >
< a id = "__codelineno-16-56" name = "__codelineno-16-56" href = "#__codelineno-16-56" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "nx" > index< / span >
< a id = "__codelineno-16-57" name = "__codelineno-16-57" href = "#__codelineno-16-57" > < / a > < span class = "p " > } < / span >
< a id = "__codelineno-16-58" name = "__codelineno-16-58" href = "#__codelineno-16-58" > < / a >
< a id = "__codelineno-16-59" name = "__codelineno-16-59" href = "#__codelineno-16-59" > < / a > < span class = "cm " > /* 查询操作 */ < / span >
< a id = "__codelineno-16-60" name = "__codelineno-16-60" href = "#__codelineno-16-60" > < / a > < span class = "kd " > func < / span > < span class = "w " > < / span > < span class = "p " > ( < / span > < span class = "nx" > h < / span > < span class = "w" > < / span > < span class = "o " > * < / span > < span class = "nx" > hashMapOpenAddressing < / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx " > get < / span > < span class = "p " > ( < / span > < span class = "nx" > key < / span > < span class = "w" > < / span > < span class = "kt " > int < / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "kt" > string < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-61" name = "__codelineno-16-61" href = "#__codelineno-16-61" > < / a > < span class = "w" > < / span > < span class = "nx" > index< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > findBucket < / span > < span class = "p" > (< / span > < span class = "nx" > key< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "c1" > // 搜索 key 对应的桶索引< / span >
< a id = "__codelineno-16-62" name = "__codelineno-16-62" href = "#__codelineno-16-62" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "kc" > nil< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-63" name = "__codelineno-16-63" href = "#__codelineno-16-63" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span > < span class = "w" > < / span > < span class = "nx " > h < / span > < span class = "p " > . < / span > < span class = "nx" > buckets < / span > < span class = "p" > [ < / span > < span class = "nx" > index < / span > < span class = "p" > ]. < / span > < span class = "nx" > val < / span > < span class = "w" > < / span > < span class = "c1" > // 若找到键值对,则返回对应 val < / span >
< a id = "__codelineno-16-64" name = "__codelineno-16-64" href = "#__codelineno-16-64" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-16-65" name = "__codelineno-16-65" href = "#__codelineno-16-65" > < / a > < span class = "w" > < / span > < span class = "k" > return < / span > < span class = "w" > < / span > < span class = "s" > " " < / span > < span class = "w" > < / span > < span class = "c1" > // 若键值对不存在,则返回 " " < / span >
< a id = "__codelineno-16-66" name = "__codelineno-16-66" href = "#__codelineno-16-66" > < / a > < span class = "p" > } < / span >
< a id = "__codelineno-16-67" name = "__codelineno-16-67" href = "#__codelineno-16-67" > < / a >
< a id = "__codelineno-16-68" name = "__codelineno-16-68" href = "#__codelineno-16-68" > < / a > < span class = "cm " > /* 添加操作 */ < / span >
< a id = "__codelineno-16-69" name = "__codelineno-16-69" href = "#__codelineno-16-69" > < / a > < span class = "kd" > func< / span > < span class = " w" > < / span > < span class = "p" > ( < / span > < span class = "nx" > h < / span > < span class = "w" > < / span > < span class = "o" > * < / span > < span class = "nx " > hashMapOpenAddressing < / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx" > put < / span > < span class = "p" > ( < / span > < span class = "nx" > key < / span > < span class = "w " > < / span > < span class = "kt " > int < / span > < span class = "p" > , < / span > < span class = "w" > < / span > < span class = "nx " > val < / span > < span class = "w" > < / span > < span class = "kt " > string < / span > < span class = "p " > ) < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-70" name = "__codelineno-16-70" href = "#__codelineno-16-70" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > loadFactor < / span > < span class = "p" > () < / span > < span class = "w " > < / span > < span class = "p" > > < / span > < span class = "w" > < / span > < span class = "nx " > h < / span > < span class = "p " > . < / span > < span class = "nx" > loadThres< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-71" name = "__codelineno-16-71" href = "#__codelineno-16-71" > < / a > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > . < / span > < span class = "nx " > extend < / span > < span class = "p " > () < / span > < span class = "w" > < / span > < span class = "c1" > // 当负载因子超过阈值时,执行扩容 < / span >
< a id = "__codelineno-16-72" name = "__codelineno-16-72" href = "#__codelineno-16-72" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-73" name = "__codelineno-16-73" href = "#__codelineno-16-73" > < / a > < span class = "w" > < / span > < span class = "nx" > index< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > findBucket< / span > < span class = "p" > (< / span > < span class = "nx" > key< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "c1" > // 搜索 key 对应的桶索引< / span >
< a id = "__codelineno-16-74" name = "__codelineno-16-74" href = "#__codelineno-16-74" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "kc" > nil< / span > < span class = "w" > < / span > < span class = "o" > ||< / span > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > TOMBSTONE < / span > < span class = "w" > < / span > < span class = "p " > { < / span >
< a id = "__codelineno-16-75" name = "__codelineno-16-75" href = "#__codelineno-16-75" > < / a > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx " > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "nx" > pair< / span > < span class = "p" > {< / span > < span class = "nx" > key< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > val< / span > < span class = "p" > }< / span > < span class = "w" > < / span > < span class = "c1" > // 若键值对不存在,则添加该键值对 < / span >
< a id = "__codelineno-16-76" name = "__codelineno-16-76" href = "#__codelineno-16-76" > < / a > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > size< / span > < span class = "o" > ++ < / span >
< a id = "__codelineno-16-77" name = "__codelineno-16-77" href = "#__codelineno-16-77" > < / a > < span class = "w" > < / span > < span class = "p " > }< / span > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-78" name = "__codelineno-16-78" href = "#__codelineno-16-78" > < / a > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index < / span > < span class = "p" > ].< / span > < span class = "nx" > val < / span > < span class = "w" > < / span > < span class = "p " > =< / span > < span class = "w" > < / span > < span class = "nx" > val < / span > < span class = "w" > < / span > < span class = "c1 " > // 若找到键值对,则覆盖 val < / span >
< a id = "__codelineno-16-79" name = "__codelineno-16-79" href = "#__codelineno-16-79" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-80" name = "__codelineno-16-80" href = "#__codelineno-16-80" > < / a > < span class = "p " > } < / span >
< a id = "__codelineno-16-81" name = "__codelineno-16-81" href = "#__codelineno-16-81" > < / a >
< a id = "__codelineno-16-82" name = "__codelineno-16-82" href = "#__codelineno-16-82" > < / a > < span class = "cm " > /* 删除操作 */ < / span >
< a id = "__codelineno-16-83" name = "__codelineno-16-83" href = "#__codelineno-16-83" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > h< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx" > remove< / span > < span class = "p" > (< / span > < span class = "nx" > key< / span > < span class = "w" > < / span > < span class = "kt" > int< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-84" name = "__codelineno-16-84" href = "#__codelineno-16-84" > < / a > < span class = "w" > < / span > < span class = "nx" > index< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > findBucket< / span > < span class = "p" > (< / span > < span class = "nx" > key< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "c1" > // 搜索 key 对应的桶索引< / span >
< a id = "__codelineno-16-85" name = "__codelineno-16-85" href = "#__codelineno-16-85" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "kc" > nil< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "p" > [< / span > < span class = "nx" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-86" name = "__codelineno-16-86" href = "#__codelineno-16-86" > < / a > < span class = "w " > < / span > < span class = "nx " > h < / span > < span class = "p" > . < / span > < span class = "nx" > buckets < / span > < span class = "p " > [ < / span > < span class = "nx" > index < / span > < span class = "p" > ] < / span > < span class = "w" > < / span > < span class = "p " > = < / span > < span class = "w " > < / span > < span class = "nx" > h < / span > < span class = "p " > . < / span > < span class = "nx" > TOMBSTONE < / span > < span class = "w" > < / span > < span class = "c1 " > // 若找到键值对,则用删除标记覆盖它 < / span >
< a id = "__codelineno-16-87" name = "__codelineno-16-87" href = "#__codelineno-16-87" > < / a > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > size < / span > < span class = "o " > -- < / span >
< a id = "__codelineno-16-88" name = "__codelineno-16-88" href = "#__codelineno-16-88" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-16-89" name = "__codelineno-16-89" href = "#__codelineno-16-89" > < / a > < span class = "p" > } < / span >
< a id = "__codelineno-16-90" name = "__codelineno-16-90" href = "#__codelineno-16-90" > < / a >
< a id = "__codelineno-16-91" name = "__codelineno-16-91" href = "#__codelineno-16-91" > < / a > < span class = "cm" > /* 扩容哈希表 */ < / span >
< a id = "__codelineno-16-92" name = "__codelineno-16-92" href = "#__codelineno-16-92" > < / a > < span class = "kd " > func < / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > h < / span > < span class = "w" > < / span > < span class = "o" > * < / span > < span class = "nx " > hashMapOpenAddressing < / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx " > extend < / span > < span class = "p " > () < / span > < span class = "w " > < / span > < span class = "p " > { < / span >
< a id = "__codelineno-16-93" name = "__codelineno-16-93" href = "#__codelineno-16-93" > < / a > < span class = "w" > < / span > < span class = "nx" > oldBuckets< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "w" > < / span > < span class = "c1" > // 暂存原哈希表< / span >
< a id = "__codelineno-16-94" name = "__codelineno-16-94" href = "#__codelineno-16-94" > < / a > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > capacity < / span > < span class = "w " > < / span > < span class = "o " > *= < / span > < span class = "w" > < / span > < span class = "nx " > h < / span > < span class = "p" > . < / span > < span class = "nx" > extendRatio < / span > < span class = "w" > < / span > < span class = "c1 " > // 更新容量 < / span >
< a id = "__codelineno-16-95" name = "__codelineno-16-95" href = "#__codelineno-16-95" > < / a > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "nb" > make< / span > < span class = "p" > ([]< / span > < span class = "o" > *< / span > < span class = "nx" > pair< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > capacity< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "c1" > // 初始化扩容后的新哈希表< / span >
< a id = "__codelineno-16-96" name = "__codelineno-16-96" href = "#__codelineno-16-96" > < / a > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > size< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "w" > < / span > < span class = "c1" > // 重置大小< / span >
< a id = "__codelineno-16-97" name = "__codelineno-16-97" href = "#__codelineno-16-97" > < / a > < span class = "w" > < / span > < span class = "c1" > // 将键值对从原哈希表搬运至新哈希表 < / span >
< a id = "__codelineno-16-98" name = "__codelineno-16-98" href = "#__codelineno-16-98" > < / a > < span class = "w" > < / span > < span class = "k" > for < / span > < span class = "w" > < / span > < span class = "nx" > _ < / span > < span class = "p" > , < / span > < span class = "w " > < / span > < span class = "nx" > pair < / span > < span class = "w " > < / span > < span class = "o " > := < / span > < span class = "w" > < / span > < span class = "k " > range < / span > < span class = "w" > < / span > < span class = "nx" > oldBuckets < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-99" name = "__codelineno-16-99" href = "#__codelineno-16-99" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > pair < / span > < span class = "w " > < / span > < span class = "o " > !=< / span > < span class = "w" > < / span > < span class = "kc " > nil < / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "nx " > pair < / span > < span class = "w" > < / span > < span class = "o " > ! =< / span > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-100" name = "__codelineno-16-100" href = "#__codelineno-16-100" > < / a > < span class = "w" > < / span > < span class = "nx" > h < / span > < span class = "p" > .< / span > < span class = "nx" > put< / span > < span class = "p" > (< / span > < span class = "nx" > pair< / span > < span class = "p" > .< / span > < span class = "nx" > key< / span > < span class = "p" > , < / span > < span class = "w" > < / span > < span class = "nx " > pair < / span > < span class = "p " > .< / span > < span class = "nx" > val < / span > < span class = "p " > ) < / span >
< a id = "__codelineno-16-101" name = "__codelineno-16-101" href = "#__codelineno-16-101" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-102" name = "__codelineno-16-102" href = "#__codelineno-16-102" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-103" name = "__codelineno-16-103" href = "#__codelineno-16-103" > < / a > < span class = "p" > }< / span >
< a id = "__codelineno-16-104" name = "__codelineno-16-104" href = "#__codelineno-16-104" > < / a >
< a id = "__codelineno-16-105" name = "__codelineno-16-105" href = "#__codelineno-16-105" > < / a > < span class = "cm" > /* 扩容 哈希表 */< / span >
< a id = "__codelineno-16-106" name = "__codelineno-16-106" href = "#__codelineno-16-106" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > m < / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nx " > extend < / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-107" name = "__codelineno-16-107" href = "#__codelineno-16-107" > < / a > < span class = "w" > < / span > < span class = "c1" > // 暂存原哈希表 < / span >
< a id = "__codelineno-16-108" name = "__codelineno-16-108" href = "#__codelineno-16-108" > < / a > < span class = "w" > < / span > < span class = "nx" > tmpBuckets< / span > < span class = "w" > < / span > < span class = "o " > := < / span > < span class = "w" > < / span > < span class = "nb" > make< / span > < span class = "p" > ([]< / span > < span class = "nx" > pair< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nb " > len < / span > < span class = "p " > ( < / span > < span class = "nx " > m< / span > < span class = "p" > . < / span > < span class = "nx " > buckets < / span > < span class = "p" > )) < / span >
< a id = "__codelineno-16-109" name = "__codelineno-16-109" href = "#__codelineno-16-109" > < / a > < span class = "w" > < / span > < span class = "nb" > copy< / span > < span class = "p" > (< / span > < span class = "nx" > tmpBuckets < / span > < span class = "p" > , < / span > < span class = "w " > < / span > < span class = "nx" > m < / span > < span class = "p" > . < / span > < span class = "nx " > buckets < / span > < span class = "p" > )< / span >
< a id = "__codelineno-16-110" name = "__codelineno-16-110" href = "#__codelineno-16-110" > < / a >
< a id = "__codelineno-16-111" name = "__codelineno-16-111" href = "#__codelineno-16-111" > < / a > < span class = "w" > < / span > < span class = "c1" > // 初始化扩容后的新哈希表 < / span >
< a id = "__codelineno-16-112" name = "__codelineno-16-112" href = "#__codelineno-16-112" > < / a > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > . < / span > < span class = "nx " > capacity < / span > < span class = "w " > < / span > < span class = "o" > *= < / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > extendRatio < / span >
< a id = "__codelineno-16-113" name = "__codelineno-16-113" href = "#__codelineno-16-113" > < / a > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > buckets < / span > < span class = "w " > < / span > < span class = "p" > = < / span > < span class = "w" > < / span > < span class = "nb " > make < / span > < span class = "p" > ([] < / span > < span class = "nx" > pair < / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > m < / span > < span class = "p" > .< / span > < span class = "nx" > capacity < / span > < span class = "p" > )< / span >
< a id = "__codelineno-16-114" name = "__codelineno-16-114" href = "#__codelineno-16-114" > < / a > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > size< / span > < span class = "w" > < / span > < span class = "p" > =< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span >
< a id = "__codelineno-16-115" name = "__codelineno-16-115" href = "#__codelineno-16-115" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 将键值对从原哈希表搬运至新哈希表 < / span >
< a id = "__codelineno-16-116" name = "__codelineno-16-116" href = "#__codelineno-16-116" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > _< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > p< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "k" > range< / span > < span class = "w" > < / span > < span class = "nx" > tmpBuckets< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-117" name = "__codelineno-16-117" href = "#__codelineno-16-117" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > p< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > pair< / span > < span class = "p" > {})< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "nx" > p< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > removed< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-118" name = "__codelineno-16-118" href = "#__codelineno-16-118" > < / a > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > put< / span > < span class = "p" > (< / span > < span class = "nx" > p< / span > < span class = "p" > .< / span > < span class = "nx" > key< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > p< / span > < span class = "p" > .< / span > < span class = "nx" > val< / span > < span class = "p" > )< / span >
< a id = "__codelineno-16-119" name = "__codelineno-16-119" href = "#__codelineno-16-119" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-120" name = "__codelineno-16-120" href = "#__codelineno-16-120" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-121" name = "__codelineno-16-121" href = "#__codelineno-16-121" > < / a > < span class = "p" > }< / span >
< a id = "__codelineno-16-122" name = "__codelineno-16-122" href = "#__codelineno-16-122" > < / a >
< a id = "__codelineno-16-123" name = "__codelineno-16-123" href = "#__codelineno-16-123" > < / a > < span class = "cm" > /* 打印哈希表 */< / span >
< a id = "__codelineno-16-124" name = "__codelineno-16-124" href = "#__codelineno-16-124" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > m< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nb" > print< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-125" name = "__codelineno-16-125" href = "#__codelineno-16-125" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > _< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > p< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "k" > range< / span > < span class = "w" > < / span > < span class = "nx" > m< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-126" name = "__codelineno-16-126" href = "#__codelineno-16-126" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > p< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > pair< / span > < span class = "p" > {})< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-127" name = "__codelineno-16-127" href = "#__codelineno-16-127" > < / a > < span class = "w" > < / span > < span class = "nx" > fmt< / span > < span class = "p" > .< / span > < span class = "nx" > Println< / span > < span class = "p" > (< / span > < span class = "nx" > strconv< / span > < span class = "p" > .< / span > < span class = "nx" > Itoa< / span > < span class = "p" > (< / span > < span class = "nx" > p< / span > < span class = "p" > .< / span > < span class = "nx" > key< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "o" > +< / span > < span class = "w" > < / span > < span class = "s" > " -> " < / span > < span class = "w" > < / span > < span class = "o" > +< / span > < span class = "w" > < / span > < span class = "nx" > p< / span > < span class = "p" > .< / span > < span class = "nx" > val< / span > < span class = "p" > )< / span >
< a id = "__codelineno-16-128" name = "__codelineno-16-128" href = "#__codelineno-16-128" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-129" name = "__codelineno-16-129" href = "#__codelineno-16-129" > < / a > < span class = "w" > < / span > < span class = "nx" > fmt< / span > < span class = "p" > .< / span > < span class = "nx" > Println< / span > < span class = "p" > (< / span > < span class = "s" > " nil" < / span > < span class = "p" > )< / span >
< a id = "__codelineno-16-130" name = "__codelineno-16-130" href = "#__codelineno-16-130" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-131" name = "__codelineno-16-131" href = "#__codelineno-16-131" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-16-132" name = "__codelineno-16-132" href = "#__codelineno-16-132" > < / a > < span class = "p" > }< / span >
< a id = "__codelineno-16-105" name = "__codelineno-16-105" href = "#__codelineno-16-105" > < / a > < span class = "cm" > /* 打印 哈希表 */< / span >
< a id = "__codelineno-16-106" name = "__codelineno-16-106" href = "#__codelineno-16-106" > < / a > < span class = "kd" > func< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "nx" > h < / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "nx" > hashMapOpenAddressing< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "nb " > print < / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-107" name = "__codelineno-16-107" href = "#__codelineno-16-107" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "nx" > _< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > pair< / span > < span class = "w" > < / span > < span class = "o" > :=< / span > < span class = "w" > < / span > < span class = "k" > range< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > buckets< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-108" name = "__codelineno-16-108" href = "#__codelineno-16-108" > < / a > < span class = "w" > < / span > < span class = "k " > if < / span > < span class = "w" > < / span > < span class = "nx" > pair< / span > < span class = "w" > < / span > < span class = "o " > == < / span > < span class = "w " > < / span > < span class = "kc " > nil < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-109" name = "__codelineno-16-109" href = "#__codelineno-16-109" > < / a > < span class = "w" > < / span > < span class = "nx" > fmt < / span > < span class = "p" > . < / span > < span class = "nx " > Println < / span > < span class = "p" > ( < / span > < span class = "s " > " nil" < / span > < span class = "p" > )< / span >
< a id = "__codelineno-16-110" name = "__codelineno-16-110" href = "#__codelineno-16-110" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "nx" > pair< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "nx" > h< / span > < span class = "p" > .< / span > < span class = "nx" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-16-111" name = "__codelineno-16-111" href = "#__codelineno-16-111" > < / a > < span class = "w" > < / span > < span class = "nx" > fmt< / span > < span class = "p" > .< / span > < span class = "nx" > Println< / span > < span class = "p" > (< / span > < span class = "s" > " TOMBSTONE" < / span > < span class = "p" > ) < / span >
< a id = "__codelineno-16-112" name = "__codelineno-16-112" href = "#__codelineno-16-112" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span > < span class = "w " > < / span > < span class = "k " > else < / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-16-113" name = "__codelineno-16-113" href = "#__codelineno-16-113" > < / a > < span class = "w" > < / span > < span class = "nx" > fmt < / span > < span class = "p" > .< / span > < span class = "nx" > Printf< / span > < span class = "p" > ( < / span > < span class = "s " > " %d -> %s\n" < / span > < span class = "p" > , < / span > < span class = "w" > < / span > < span class = "nx " > pair < / span > < span class = "p" > . < / span > < span class = "nx" > key < / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "nx" > pair < / span > < span class = "p" > .< / span > < span class = "nx" > val < / span > < span class = "p" > )< / span >
< a id = "__codelineno-16-114" name = "__codelineno-16-114" href = "#__codelineno-16-114" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-16-115" name = "__codelineno-16-115" href = "#__codelineno-16-115" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-16-116" name = "__codelineno-16-116" href = "#__codelineno-16-116" > < / a > < span class = "p" > } < / span >
< / code > < / pre > < / div >
< / div >
< div class = "tabbed-block" >
@@ -6164,139 +6148,145 @@
< div class = "tabbed-block" >
< div class = "highlight" > < span class = "filename" > hash_map_open_addressing.rs< / span > < pre > < span > < / span > < code > < a id = "__codelineno-21-1" name = "__codelineno-21-1" href = "#__codelineno-21-1" > < / a > < span class = "cm" > /* 开放寻址哈希表 */< / span >
< a id = "__codelineno-21-2" name = "__codelineno-21-2" href = "#__codelineno-21-2" > < / a > < span class = "k" > struct< / span > < span class = "nc" > HashMapOpenAddressing< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-3" name = "__codelineno-21-3" href = "#__codelineno-21-3" > < / a > < span class = "w" > < / span > < span class = "n" > size< / span > : < span class = "kt" > usize< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 键值对数量< / span >
< a id = "__codelineno-21-4" name = "__codelineno-21-4" href = "#__codelineno-21-4" > < / a > < span class = "w" > < / span > < span class = "n" > capacity< / span > : < span class = "kt" > usize< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 哈希表容量< / span >
< a id = "__codelineno-21-5" name = "__codelineno-21-5" href = "#__codelineno-21-5" > < / a > < span class = "w" > < / span > < span class = "n" > load_thres< / span > : < span class = "kt" > f64< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 触发扩容的负载因子阈值< / span >
< a id = "__codelineno-21-6" name = "__codelineno-21-6" href = "#__codelineno-21-6" > < / a > < span class = "w" > < / span > < span class = "n" > extend_ratio< / span > : < span class = "kt" > usize< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 扩容倍数< / span >
< a id = "__codelineno-21-7" name = "__codelineno-21-7" href = "#__codelineno-21-7" > < / a > < span class = "w" > < / span > < span class = "n" > buckets< / span > : < span class = "nb" > Vec< / span > < span class = "o" > < < / span > < span class = "nb" > Option< / span > < span class = "o" > < < / span > < span class = "n" > Pair< / span > < span class = "o" > > > < / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 桶数组< / span >
< a id = "__codelineno-21-8" name = "__codelineno-21-8" href = "#__codelineno-21-8" > < / a > < span class = "w" > < / span > < span class = "n" > TOMBSTONE< / span > : < span class = "nb" > Option< / span > < span class = "o" > < < / span > < span class = "n" > Pair< / span > < span class = "o" > > < / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 删除标记< / span >
< a id = "__codelineno-21-3" name = "__codelineno-21-3" href = "#__codelineno-21-3" > < / a > < span class = "w" > < / span > < span class = "n" > size< / span > : < span class = "kt" > usize< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 键值对数量< / span >
< a id = "__codelineno-21-4" name = "__codelineno-21-4" href = "#__codelineno-21-4" > < / a > < span class = "w" > < / span > < span class = "n" > capacity< / span > : < span class = "kt" > usize< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 哈希表容量< / span >
< a id = "__codelineno-21-5" name = "__codelineno-21-5" href = "#__codelineno-21-5" > < / a > < span class = "w" > < / span > < span class = "n" > load_thres< / span > : < span class = "kt" > f64< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 触发扩容的负载因子阈值< / span >
< a id = "__codelineno-21-6" name = "__codelineno-21-6" href = "#__codelineno-21-6" > < / a > < span class = "w" > < / span > < span class = "n" > extend_ratio< / span > : < span class = "kt" > usize< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 扩容倍数< / span >
< a id = "__codelineno-21-7" name = "__codelineno-21-7" href = "#__codelineno-21-7" > < / a > < span class = "w" > < / span > < span class = "n" > buckets< / span > : < span class = "nb" > Vec< / span > < span class = "o" > < < / span > < span class = "nb" > Option< / span > < span class = "o" > < < / span > < span class = "n" > Pair< / span > < span class = "o" > > > < / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 桶数组< / span >
< a id = "__codelineno-21-8" name = "__codelineno-21-8" href = "#__codelineno-21-8" > < / a > < span class = "w" > < / span > < span class = "n" > TOMBSTONE< / span > : < span class = "nb" > Option< / span > < span class = "o" > < < / span > < span class = "n" > Pair< / span > < span class = "o" > > < / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "c1" > // 删除标记< / span >
< a id = "__codelineno-21-9" name = "__codelineno-21-9" href = "#__codelineno-21-9" > < / a > < span class = "p" > }< / span >
< a id = "__codelineno-21-10" name = "__codelineno-21-10" href = "#__codelineno-21-10" > < / a >
< a id = "__codelineno-21-11" name = "__codelineno-21-11" href = "#__codelineno-21-11" > < / a >
< a id = "__codelineno-21-12" name = "__codelineno-21-12" href = "#__codelineno-21-12" > < / a > < span class = "k " > impl< / span > < span class = "w" > < / span > < span class = "n " > HashMapOpenAddressing< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-13" name = "__codelineno-21-13" href = "#__codelineno-21-13" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 构造方法 */ < / span >
< a id = "__codelineno-21-14" name = "__codelineno-21-14" href = "#__codelineno-21-14" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > new< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > -> < span class = "nc "> Self< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-15" name = "__codelineno-21-15" href = "#__codelineno-21-15" > < / a > < span class = "w" > < / span > < span class = "bp " > Self < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-16" name = "__codelineno-21-16" href = "#__codelineno-21-16" > < / a > < span class = "w" > < / span > < span class = "n" > size < / span > : < span class = "mi" > 0 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-21-17" name = "__codelineno-21-17" href = "#__codelineno-21-17" > < / a > < span class = "w" > < / span > < span class = "n" > capacity< / span > : < span class = "mi " > 4 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-21-18" name = "__codelineno-21-18" href = "#__codelineno-21-18" > < / a > < span class = "w" > < / span > < span class = "n" > load_thres < / span > : < span class = "mf " > 2.0< / span > < span class = "w" > < / span > < span class = "o" > /< / span > < span class = "w" > < / span > < span class = "mf" > 3.0 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-21-19" name = "__codelineno-21-19" href = "#__codelineno-21-19" > < / a > < span class = "w" > < / span > < span class = "n" > extend_ratio< / span > : < span class = "mi" > 2 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-21-20" name = "__codelineno-21-20" href = "#__codelineno-21-20" > < / a > < span class = "w" > < / span > < span class = "n" > buckets < / span > : < span class = "nc " > vec< / span > < span class = "o" > ! < / span > < span class = "p" > [ < / span > < span class = "nb " > None< / span > < span class = "p" > ; < / span > < span class = "w" > < / span > < span class = "mi" > 4< / span > < span class = "p" > ], < / span >
< a id = "__codelineno-21-21" name = "__codelineno-21-21" href = "#__codelineno-21-21" > < / a > < span class = "w" > < / span > < span class = "n" > TOMBSTONE< / span > : < span class = "nb" > Some< / span > < span class = "p" > (< / span > < span class = "n" > Pair< / span > < span class = "w" > < / span > < span class = "p" > {< / span > < span class = "n" > key< / span > : < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > val< / span > : < span class = "s" > " -1" < / span > < span class = "p" > .< / span > < span class = "n" > to_string< / span > < span class = "p" > ()}) ,< / span >
< a id = "__codelineno-21-22" name = "__codelineno-21-22" href = "#__codelineno-21-22" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-23" name = "__codelineno-21-23" href = "#__codelineno-21-23" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-24" name = "__codelineno-21-24" href = "#__codelineno-21-24" > < / a >
< a id = "__codelineno-21-25" name = "__codelineno-21-25" href = "#__codelineno-21-25" > < / a > < span class = "w" > < / span > < span class = "cm " > /* 哈希函数 */ < / span >
< a id = "__codelineno-21-26" name = "__codelineno-21-26" href = "#__codelineno-21-26" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > hash_func< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > key< / span > : < span class = "kt" > i32< / span > < span class = "p" > )< / span > < span class = "w" > < / span > -> < span class = "kt" > usize< / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-27" name = "__codelineno-21-27" href = "#__codelineno-21-27" > < / a > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "w" > < / span > < span class = "o" > %< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > i32< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > usize < / span >
< a id = "__codelineno-21-28" name = "__codelineno-21-28" href = "#__codelineno-21-28" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-29" name = "__codelineno-21-29" href = "#__codelineno-21-29" > < / a >
< a id = "__codelineno-21-30" name = "__codelineno-21-30" href = "#__codelineno-21-30" > < / a > < span class = "w" > < / span > < span class = "cm " > /* 负载因子 */ < / span >
< a id = "__codelineno-21-31" name = "__codelineno-21-31" href = "#__codelineno-21-31" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > load_factor< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "bp" > self< / span > < span class = "p" > )< / span > < span class = "w" > < / span > -> < span class = "kt" > f64< / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-32" name = "__codelineno-21-32" href = "#__codelineno-21-32" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > size< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > f64< / span > < span class = "w" > < / span > < span class = "o" > /< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > f64 < / span >
< a id = "__codelineno-21-33" name = "__codelineno-21-33" href = "#__codelineno-21-33" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-34" name = "__codelineno-21-34" href = "#__codelineno-21-34" > < / a >
< a id = "__codelineno-21-35" name = "__codelineno-21-35" href = "#__codelineno-21-35" > < / a > < span class = "w" > < / span > < span class = "cm " > /* 搜索 key 对应的桶索引 */ < / span >
< a id = "__codelineno-21-36" name = "__codelineno-21-36" href = "#__codelineno-21-36" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > find_bucket< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > key< / span > : < span class = "kt" > i32< / span > < span class = "p" > )< / span > < span class = "w" > < / span > -> < span class = "kt" > usize< / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-37" name = "__codelineno-21-37" href = "#__codelineno-21-37" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > hash_func< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-38" name = "__codelineno-21-38" href = "#__codelineno-21-38" > < / a > < span class = "w" > < / span > < span class = "kd " > l et< / span > < span class = "w " > < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "n " > first_tombstone < / span > < span class = "w" > < / span > < span class = "o " > = < / span > < span class = "w " > < / span > < span class = "o " > - < / span > < span class = "mi " > 1 < / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-39" name = "__codelineno-21-39" href = "#__codelineno-21-39" > < / a > < span class = "w" > < / span > < span class = "c1" > // 线性探测,当遇到空桶时跳出 < / span >
< a id = "__codelineno-21-40" name = "__codelineno-21-40" href = "#__codelineno-21-40" > < / a > < span class = "w" > < / span > < span class = "k" > whi le< / span > < span class = "w" > < / span > < span class = "bp " > self < / span > < span class = "p " > . < / span > < span class = "n" > buckets< / span > < span class = "p" > [ < / span > < span class = "n " > index < / span > < span class = "p " > ]. < / span > < span class = "n " > is_some < / span > < span class = "p " > () < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-41" name = "__codelineno-21-41" href = "#__codelineno-21-41" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若遇到 key, 返回对应的桶索引 < / span >
< a id = "__codelineno-21-42" name = "__codelineno-21-42" href = "#__codelineno-21-42" > < / a > < span class = "w" > < / span > < span class = "k" > if < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > a s_ref < / span > < span class = "p" > ().< / span > < span class = "n" > unwrap< / span > < span class = "p" > ().< / span > < span class = "n" > key< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "n" > key < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-43" name = "__codelineno-21-43" href = "#__codelineno-21-43" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若之前遇到了删除标记,则将建值对移动至该 索引< / span >
< a id = "__codelineno-21-44" name = "__codelineno-21-44" href = "#__codelineno-21-44" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n " > first_tombstone < / span > < span class = "w " > < / span > < span class = "o" > != < / span > < span class = "w" > < / span > < span class = "o" > - < / span > < span class = "mi " > 1 < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-45" name = "__codelineno-21-45" href = "#__codelineno-21-45" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > usize< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > take< / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-46" name = "__codelineno-21-46" href = "#__codelineno-21-46" > < / a > < span class = "w" > < / span > < span class = "bp " > sel f< / span > < span class = "p " > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ] < / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p " > . < / span > < span class = "n " > TOMBSTONE < / span > < span class = "p " > .< / span > < span class = "n" > clone < / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-47" name = "__codelineno-21-47" href = "#__codelineno-21-47" > < / a > < span class = "w" > < / span > < span class = "k " > return < / span > < span class = "w " > < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > usize< / span > < span class = "p" > ; < / span > < span class = "w" > < / span > < span class = "c1" > // 返回移动后的桶索引 < / span >
< a id = "__codelineno-21-48" name = "__codelineno-21-48" href = "#__codelineno-21-48" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-49" name = "__codelineno-21-49" href = "#__codelineno-21-49" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "n" > index < / span > < span class = "p " > ; < / span > < span class = "w" > < / span > < span class = "c1" > // 返回桶索引< / span >
< a id = "__codelineno-21-50" name = "__codelineno-21-50" href = "#__codelineno-21-50" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-51" name = "__codelineno-21-51" href = "#__codelineno-21-51" > < / a > < span class = "w" > < / span > < span class = "c1" > // 记录遇到的首个删除标记 < / span >
< a id = "__codelineno-21-52" name = "__codelineno-21-52" href = "#__codelineno-21-52" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-53" name = "__codelineno-21-53" href = "#__codelineno-21-53" > < / a > < span class = "w" > < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > i32< / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-54" name = "__codelineno-21-54" href = "#__codelineno-21-54" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-55" name = "__codelineno-21-55" href = "#__codelineno-21-55" > < / a > < span class = "w" > < / span > < span class = "c1" > // 计算桶索引,越过尾部则返回头部 < / span >
< a id = "__codelineno-21-56" name = "__codelineno-21-56" href = "#__codelineno-21-56" > < / a > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > +< / span > < span class = "w" > < / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "o" > %< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity< / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-57" name = "__codelineno-21-57" href = "#__codelineno-21-57" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-58" name = "__codelineno-21-58" href = "#__codelineno-21-58" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若 key 不存在,则返回添加点的索引 < / span >
< a id = "__codelineno-21-59" name = "__codelineno-21-59" href = "#__codelineno-21-59" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "w" > < / span > < span class = "p" > {< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "p" > }< / span > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "p" > {< / span > < span class = "w" > < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > usize< / span > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-60" name = "__codelineno-21-60" href = "#__codelineno-21-60" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-61" name = "__codelineno-21-61" href = "#__codelineno-21-61" > < / a >
< a id = "__codelineno-21-62" name = "__codelineno-21-62" href = "#__codelineno-21-62" > < / a > < span class = "w" > < / span > < span class = "cm " > /* 查询操作 */ < / span >
< a id = "__codelineno-21-63" name = "__codelineno-21-63" href = "#__codelineno-21-63" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > get< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "k "> mut < / span > < span class = "w" > < / span > < span class = "bp " > s elf< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > key< / span > : < span class = "kt" > i32< / span > < span class = "p" > )< / span > < span class = "w" > < / span > -> < span class = "nb" > Option< / span > < span class = "o" > < & < / span > < span class = "kt" > str< / span > < span class = "o" > > < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-64" name = "__codelineno-21-64" href = "#__codelineno-21-64" > < / a > < span class = "w" > < / span > < span class = "c1" > // 搜索 key 对应的桶索引 < / span >
< a id = "__codelineno-21-65" name = "__codelineno-21-65" href = "#__codelineno-21-65" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > find_bucket< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-66" name = "__codelineno-21-66" href = "#__codelineno-21-66" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 若找到键值对,则返回对应 val < / span >
< a id = "__codelineno-21-67" name = "__codelineno-21-67" href = "#__codelineno-21-67" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > is_some< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-68" name = "__codelineno-21-68" href = "#__codelineno-21-68" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > as_ref< / span > < span class = "p" > ().< / span > < span class = "n" > map< / span > < span class = "p" > (< / span > < span class = "o" > |< / span > < span class = "n" > pair< / span > < span class = "o" > |< / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > val< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "kt" > str< / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-69" name = "__codelineno-21-69" href = "#__codelineno-21-69" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-70" name = "__codelineno-21-70" href = "#__codelineno-21-70" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若键值对不存在,则返回 null < / span >
< a id = "__codelineno-21-71" name = "__codelineno-21-71" href = "#__codelineno-21-71" > < / a > < span class = "w" > < / span > < span class = "nb" > None < / span >
< a id = "__codelineno-21-72" name = "__codelineno-21-72" href = "#__codelineno-21-72" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-73" name = "__codelineno-21-73" href = "#__codelineno-21-73" > < / a >
< a id = "__codelineno-21-74" name = "__codelineno-21-74" href = "#__codelineno-21-74" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 添加操作 */ < / span >
< a id = "__codelineno-21-75" name = "__codelineno-21-75" href = "#__codelineno-21-75" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > put< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > key< / span > : < span class = "kt" > i32< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > val< / span > : < span class = "nb" > String< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-76" name = "__codelineno-21-76" href = "#__codelineno-21-76" > < / a > < span class = "w" > < / span > < span class = "c1" > // 当负载因子超过阈值时,执行扩容 < / span >
< a id = "__codelineno-21-77" name = "__codelineno-21-77" href = "#__codelineno-21-77" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > load_factor< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > > < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > load_thres< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-78" name = "__codelineno-21-78" href = "#__codelineno-21-78" > < / a > < span class = "w" > < / span > < span class = "b p" > self< / span > < span class = "p" > .< / span > < span class = "n" > extend< / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-79" name = "__codelineno-21-79" href = "#__codelineno-21-79" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-80" name = "__codelineno-21-80" href = "#__codelineno-21-80" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 搜索 key 对应的桶索引 < / span >
< a id = "__codelineno-21-81" name = "__codelineno-21-81" href = "#__codelineno-21-81" > < / a > < span class = "w" > < / span > < span class = "kd " > let < / span > < span class = "w " > < / span > < span class = "n " > index < / span > < span class = "w " > < / span > < span class = "o " > = < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > . < / span > < span class = "n " > find_bucket< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-82" name = "__codelineno-21-82" href = "#__codelineno-21-82" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若找到键值对,则覆盖 val 并返回 < / span >
< a id = "__codelineno-21-83" name = "__codelineno-21-83" href = "#__codelineno-21-83" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > is_some < / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > & & ; < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-84" name = "__codelineno-21-84" href = "#__codelineno-21-84" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > as_mut< / span > < span class = "p" > ().< / span > < span class = "n" > unwrap< / span > < span class = "p" > ().< / span > < span class = "n" > val< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > val< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-21-85" name = "__codelineno-21-85" href = "#__codelineno-21-85" > < / a > < span class = "w" > < / span > < span class = "k" > return < / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-86" name = "__codelineno-21-86" href = "#__codelineno-21-86" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-87" name = "__codelineno-21-87" href = "#__codelineno-21-87" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若键值对不存在,则添加该键值对 < / span >
< a id = "__codelineno-21-88" name = "__codelineno-21-88" href = "#__codelineno-21-88" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nb" > Some< / span > < span class = "p" > (< / span > < span class = "n" > Pair< / span > < span class = "w" > < / span > < span class = "p" > {< / span > < span class = "w" > < / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > val< / span > < span class = "w" > < / span > < span class = "p" > }); < / span >
< a id = "__codelineno-21-89" name = "__codelineno-21-89" href = "#__codelineno-21-89" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > size < / span > < span class = "w" > < / span > < span class = "o" > += < / span > < span class = "w" > < / span > < span class = "mi " > 1 < / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-90" name = "__codelineno-21-90" href = "#__codelineno-21-90" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-91" name = "__codelineno-21-91" href = "#__codelineno-21-91" > < / a >
< a id = "__codelineno-21-92" name = "__codelineno-21-92" href = "#__codelineno-21-92" > < / a > < span class = "w" > < / span > < span class = "cm " > /* 删除操作 */ < / span >
< a id = "__codelineno-21-93" name = "__codelineno-21-93" href = "#__codelineno-21-93" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > remove< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > key< / span > : < span class = "kt" > i32< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-94" name = "__codelineno-21-94" href = "#__codelineno-21-94" > < / a > < span class = "w" > < / span > < span class = "c1" > // 搜索 key 对应的桶索引 < / span >
< a id = "__codelineno-21-95" name = "__codelineno-21-95" href = "#__codelineno-21-95" > < / a > < span class = "w" > < / span > < span class = "kd " > let < / span > < span class = "w " > < / span > < span class = "n" > index < / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > find_bucket< / span > < span class = "p" > (< / span > < span class = "n" > key < / span > < span class = "p" > ) ;< / span >
< a id = "__codelineno-21-96" name = "__codelineno-21-96" href = "#__codelineno-21-96" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 若找到键值对,则用删除标记覆盖它 < / span >
< a id = "__codelineno-21-97" name = "__codelineno-21-97" href = "#__codelineno-21-97" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > is_some< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-98" name = "__codelineno-21-98" href = "#__codelineno-21-98" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "p" > .< / span > < span class = "n" > clone< / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-99" name = "__codelineno-21-99" href = "#__codelineno-21-99" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > . < / span > < span class = "n " > size < / span > < span class = "w " > < / span > < span class = "o " > -= < / span > < span class = "w " > < / span > < span class = "mi " > 1 < / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-100" name = "__codelineno-21-100" href = "#__codelineno-21-100" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-101" name = "__codelineno-21-101" href = "#__codelineno-21-101" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-102" name = "__codelineno-21-102" href = "#__codelineno-21-102" > < / a >
< a id = "__codelineno-21-103" name = "__codelineno-21-103" href = "#__codelineno-21-103" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 扩容哈希表 */ < / span >
< a id = "__codelineno-21-104" name = "__codelineno-21-104" href = "#__codelineno-21-104" > < / a > < span class = "w" > < / span > < span class = "k " > fn < / span > < span class = "nf " > extend < / span > < span class = "p" > ( < / span > < span class = "o " > & < / span > < span class = "k " > mut < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > ) < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-105" name = "__codelineno-21-105" href = "#__codelineno-21-105" > < / a > < span class = "w" > < / span > < span class = "c1" > // 暂存原哈希表 < / span >
< a id = "__codelineno-21-106" name = "__codelineno-21-106" href = "#__codelineno-21-106" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "n" > buckets_tmp< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > .< / span > < span class = "n" > clone< / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-107" name = "__codelineno-21-107" href = "#__codelineno-21-107" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 初始化扩容后的新哈希表 < / span >
< a id = "__codelineno-21-108" name = "__codelineno-21-108" href = "#__codelineno-21-108" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity< / span > < span class = "w" > < / span > < span class = "o" > *=< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > extend_ratio< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-21-109" name = "__codelineno-21-109" href = "#__codelineno-21-109" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "fm" > vec!< / span > < span class = "p" > [< / span > < span class = "nb" > None< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity< / span > < span class = "p" > ]; < / span >
< a id = "__codelineno-21-110" name = "__codelineno-21-110" href = "#__codelineno-21-110" > < / a > < span class = "w" > < / span > < span class = "bp " > self < / span > < span class = "p" > . < / span > < span class = "n " > size < / span > < span class = "w" > < / span > < span class = "o " > = < / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-111" name = "__codelineno-21-111" href = "#__codelineno-21-111" > < / a >
< a id = "__codelineno-21-112" name = "__codelineno-21-112" href = "#__codelineno-21-112" > < / a > < span class = "w" > < / span > < span class = "c1" > // 将键值对从原哈希表搬运至新哈希表 < / span >
< a id = "__codelineno-21-113" name = "__codelineno-21-113" href = "#__codelineno-21-113" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "w" > < / span > < span class = "k" > in< / span > < span class = "w" > < / span > < span class = "n" > buckets_tmp< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-114" name = "__codelineno-21-114" href = "#__codelineno-21-114" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > is_none< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > ||< / span > < span class = "w" > < / span > < span class = "n" > pair < / span > < span class = "w" > < / span > < span class = "o" > = =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-115" name = "__codelineno-21-115" href = "#__codelineno-21-115" > < / a > < span class = "w" > < / span > < span class = "k" > continue< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-21-116" name = "__codelineno-21-116" href = "#__codelineno-21-116" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-117" name = "__codelineno-21-117" href = "#__codelineno-21-117" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > unwrap< / span > < span class = "p" > ();< / span >
< a id = "__codelineno-21-118" name = "__codelineno-21-118" href = "#__codelineno-21-118" > < / a >
< a id = "__codelineno-21-119" name = "__codelineno-21-119" href = "#__codelineno-21-119" > < / a > < span class = "w" > < / span > < span class = "bp " > self< / span > < span class = "p" > . < / span > < span class = "n " > put< / span > < span class = "p" > ( < / span > < span class = "n" > pair< / span > < span class = "p " > . < / span > < span class = "n " > key< / span > < span class = "p" > , < / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "p" > . < / span > < span class = "n " > val < / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-120" name = "__codelineno-21-120" href = "#__codelineno-21-120" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-121" name = "__codelineno-21-121" href = "#__codelineno-21-121" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-122" name = "__codelineno-21-122" href = "#__codelineno-21-122" > < / a > < span class = "w" > < / span > < span class = "cm " > /* 打印哈希表 */ < / span >
< a id = "__codelineno-21-123" name = "__codelineno-21-123" href = "#__codelineno-21-123" > < / a > < span class = "w" > < / span > < span class = "k" > fn < / span > < span class = "nf " > print < / span > < span class = "p " > ( < / span > < span class = "o" > & < / span > < span class = "bp " > self < / span > < span class = "p" > ) < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-124" name = "__codelineno-21-124" href = "#__codelineno-21-124" > < / a > < span class = "w" > < / span > < span class = "k" > for< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "w" > < / span > < span class = "k" > in< / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-125" name = "__codelineno-21-125" href = "#__codelineno-21-125" > < / a > < span class = "w" > < / span > < span class = "k " > i f< / span > < span class = "w " > < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > is_none< / span > < span class = "p " > () < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-126" name = "__codelineno-21-126" href = "#__codelineno-21-126" > < / a > < span class = "w" > < / span > < span class = "fm" > println!< / span > < span class = "p" > (< / span > < span class = "s" > " null" < / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-127" name = "__codelineno-21-127" href = "#__codelineno-21-127" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-128" name = "__codelineno-21-128" href = "#__codelineno-21-128" > < / a > < span class = "w" > < / span > < span class = "f m" > println!< / span > < span class = "p" > (< / span > < span class = "s" > " TOMBSTONE" < / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-129" name = "__codelineno-21-129" href = "#__codelineno-21-129" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span > < span class = "w " > < / span > < span class = "k " > else < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-130" name = "__codelineno-21-130" href = "#__codelineno-21-130" > < / a > < span class = "w" > < / span > < span class = "kd " > let < / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "w" > < / span > < span class = "o " > = < / span > < span class = "w" > < / span > < span class = "n " > pair < / span > < span class = "p" > . < / span > < span class = "n " > as_ref < / span > < span class = "p " > (). < / span > < span class = "n " > unwrap < / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-131" name = "__codelineno-21-131" href = "#__codelineno-21-131" > < / a > < span class = "w" > < / span > < span class = "fm " > println!< / span > < span class = "p" > (< / span > < span class = "s" > " {} -> {}" < / span > < span class = "p" > , < / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n " > pair < / span > < span class = "p " > .< / span > < span class = "n" > val < / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-132" name = "__codelineno-21-132" href = "#__codelineno-21-132" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-133" name = "__codelineno-21-133" href = "#__codelineno-21-133" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-134" name = "__codelineno-21-134" href = "#__codelineno-21-134" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-135" name = "__codelineno-21-135" href = "#__codelineno-21-135" > < / a > < span class = "p" > } < / span >
< a id = "__codelineno-21-11" name = "__codelineno-21-11" href = "#__codelineno-21-11" > < / a > < span class = "k" > impl< / span > < span class = "w" > < / span > < span class = "n" > HashMapOpenAddressing< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-12" name = "__codelineno-21-12" href = "#__codelineno-21-12" > < / a > < span class = "w " > < / span > < span class = "cm " > /* 构造方法 */ < / span >
< a id = "__codelineno-21-13" name = "__codelineno-21-13" href = "#__codelineno-21-13" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > new< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > -> < span class = "nc" > Self< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-14" name = "__codelineno-21-14" href = "#__codelineno-21-14" > < / a > < span class = "w" > < / span > < span class = "bp " > Self< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-15" name = "__codelineno-21-15" href = "#__codelineno-21-15" > < / a > < span class = "w" > < / span > < span class = "n " > size < / span > : < span class = "mi " > 0 < / span > < span class = "p" > , < / span >
< a id = "__codelineno-21-16" name = "__codelineno-21-16" href = "#__codelineno-21-16" > < / a > < span class = "w" > < / span > < span class = "n" > capacity < / span > : < span class = "mi" > 4 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-21-17" name = "__codelineno-21-17" href = "#__codelineno-21-17" > < / a > < span class = "w" > < / span > < span class = "n" > load_thres< / span > : < span class = "mf" > 2.0< / span > < span class = "w" > < / span > < span class = "o" > /< / span > < span class = "w" > < / span > < span class = "mf " > 3.0 < / span > < span class = "p" > ,< / span >
< a id = "__codelineno-21-18" name = "__codelineno-21-18" href = "#__codelineno-21-18" > < / a > < span class = "w" > < / span > < span class = "n" > extend_ratio < / span > : < span class = "mi " > 2< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-21-19" name = "__codelineno-21-19" href = "#__codelineno-21-19" > < / a > < span class = "w" > < / span > < span class = "n" > buckets< / span > : < span class = "nc" > vec< / span > < span class = "o" > !< / span > < span class = "p" > [< / span > < span class = "nb" > None< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "mi" > 4 < / span > < span class = "p" > ] ,< / span >
< a id = "__codelineno-21-20" name = "__codelineno-21-20" href = "#__codelineno-21-20" > < / a > < span class = "w" > < / span > < span class = "n" > TOMBSTONE < / span > : < span class = "nb " > Some < / span > < span class = "p" > ( < / span > < span class = "n" > Pair < / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-21" name = "__codelineno-21-21" href = "#__codelineno-21-21" > < / a > < span class = "w" > < / span > < span class = "n" > key< / span > : < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-21-22" name = "__codelineno-21-22" href = "#__codelineno-21-22" > < / a > < span class = "w" > < / span > < span class = "n" > val< / span > : < span class = "s" > " -1" < / span > < span class = "p" > .< / span > < span class = "n" > to_string< / span > < span class = "p" > (), < / span >
< a id = "__codelineno-21-23" name = "__codelineno-21-23" href = "#__codelineno-21-23" > < / a > < span class = "w" > < / span > < span class = "p" > }), < / span >
< a id = "__codelineno-21-24" name = "__codelineno-21-24" href = "#__codelineno-21-24" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-25" name = "__codelineno-21-25" href = "#__codelineno-21-25" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-26" name = "__codelineno-21-26" href = "#__codelineno-21-26" > < / a >
< a id = "__codelineno-21-27" name = "__codelineno-21-27" href = "#__codelineno-21-27" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 哈希函数 */ < / span >
< a id = "__codelineno-21-28" name = "__codelineno-21-28" href = "#__codelineno-21-28" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > hash_func< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > key< / span > : < span class = "kt" > i32< / span > < span class = "p" > )< / span > < span class = "w" > < / span > -> < span class = "kt" > usize< / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-29" name = "__codelineno-21-29" href = "#__codelineno-21-29" > < / a > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "w" > < / span > < span class = "o" > %< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > i32< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > usize< / span >
< a id = "__codelineno-21-30" name = "__codelineno-21-30" href = "#__codelineno-21-30" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-31" name = "__codelineno-21-31" href = "#__codelineno-21-31" > < / a >
< a id = "__codelineno-21-32" name = "__codelineno-21-32" href = "#__codelineno-21-32" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 负载因子 */ < / span >
< a id = "__codelineno-21-33" name = "__codelineno-21-33" href = "#__codelineno-21-33" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > load_factor< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "bp" > self< / span > < span class = "p" > )< / span > < span class = "w" > < / span > -> < span class = "kt" > f64< / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-34" name = "__codelineno-21-34" href = "#__codelineno-21-34" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > size< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > f64< / span > < span class = "w" > < / span > < span class = "o" > /< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > f64< / span >
< a id = "__codelineno-21-35" name = "__codelineno-21-35" href = "#__codelineno-21-35" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-36" name = "__codelineno-21-36" href = "#__codelineno-21-36" > < / a >
< a id = "__codelineno-21-37" name = "__codelineno-21-37" href = "#__codelineno-21-37" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 搜索 key 对应的桶索引 */ < / span >
< a id = "__codelineno-21-38" name = "__codelineno-21-38" href = "#__codelineno-21-38" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > find_buck et< / span > < span class = "p " > (< / span > < span class = "o" > & < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "bp " > self< / span > < span class = "p" > , < / span > < span class = "w" > < / span > < span class = "n " > key < / span > : < span class = "kt " > i32< / span > < span class = "p" > ) < / span > < span class = "w " > < / span > -> < span class = "kt " > usize < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-39" name = "__codelineno-21-39" href = "#__codelineno-21-39" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > hash_func< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-40" name = "__codelineno-21-40" href = "#__codelineno-21-40" > < / a > < span class = "w" > < / span > < span class = "kd " > let < / span > < span class = "w" > < / span > < span class = "k " > mut < / span > < span class = "w " > < / span > < span class = "n" > first_tombstone < / span > < span class = "w " > < / span > < span class = "o " > = < / span > < span class = "w " > < / span > < span class = "o " > - < / span > < span class = "mi " > 1 < / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-41" name = "__codelineno-21-41" href = "#__codelineno-21-41" > < / a > < span class = "w" > < / span > < span class = "c1" > // 线性探测,当遇到空桶时跳出 < / span >
< a id = "__codelineno-21-42" name = "__codelineno-21-42" href = "#__codelineno-21-42" > < / a > < span class = "w" > < / span > < span class = "k" > while < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > i s_some < / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-43" name = "__codelineno-21-43" href = "#__codelineno-21-43" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若遇到 key, 返回对应的桶 索引< / span >
< a id = "__codelineno-21-44" name = "__codelineno-21-44" href = "#__codelineno-21-44" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "bp " > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index < / span > < span class = "p " > ].< / span > < span class = "n" > as_ref< / span > < span class = "p" > ().< / span > < span class = "n" > unwrap< / span > < span class = "p" > ().< / span > < span class = "n" > key < / span > < span class = "w" > < / span > < span class = "o" > == < / span > < span class = "w " > < / span > < span class = "n" > key < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-45" name = "__codelineno-21-45" href = "#__codelineno-21-45" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若之前遇到了删除标记,则将建值对移动至该索引 < / span >
< a id = "__codelineno-21-46" name = "__codelineno-21-46" href = "#__codelineno-21-46" > < / a > < span class = "w" > < / span > < span class = "k " > i f< / span > < span class = "w " > < / span > < span class = "n" > first_tombstone < / span > < span class = "w" > < / span > < span class = "o" > ! =< / span > < span class = "w" > < / span > < span class = "o " > - < / span > < span class = "mi " > 1 < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-47" name = "__codelineno-21-47" href = "#__codelineno-21-47" > < / a > < span class = "w" > < / span > < span class = "bp " > self< / span > < span class = "p" > . < / span > < span class = "n " > buckets< / span > < span class = "p" > [ < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > usize< / span > < span class = "p" > ] < / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > take< / span > < span class = "p" > ();< / span >
< a id = "__codelineno-21-48" name = "__codelineno-21-48" href = "#__codelineno-21-48" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "p" > .< / span > < span class = "n" > clone< / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-49" name = "__codelineno-21-49" href = "#__codelineno-21-49" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "n" > first_tombstone < / span > < span class = "w" > < / span > < span class = "k " > as < / span > < span class = "w" > < / span > < span class = "kt" > usize< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "c1" > // 返回移动后的 桶索引< / span >
< a id = "__codelineno-21-50" name = "__codelineno-21-50" href = "#__codelineno-21-50" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-51" name = "__codelineno-21-51" href = "#__codelineno-21-51" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "c1" > // 返回桶索引 < / span >
< a id = "__codelineno-21-52" name = "__codelineno-21-52" href = "#__codelineno-21-52" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-53" name = "__codelineno-21-53" href = "#__codelineno-21-53" > < / a > < span class = "w" > < / span > < span class = "c1" > // 记录遇到的首个删除标记 < / span >
< a id = "__codelineno-21-54" name = "__codelineno-21-54" href = "#__codelineno-21-54" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-55" name = "__codelineno-21-55" href = "#__codelineno-21-55" > < / a > < span class = "w" > < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > i32< / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-56" name = "__codelineno-21-56" href = "#__codelineno-21-56" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-57" name = "__codelineno-21-57" href = "#__codelineno-21-57" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 计算桶索引,越过尾部则返回头部 < / span >
< a id = "__codelineno-21-58" name = "__codelineno-21-58" href = "#__codelineno-21-58" > < / a > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > +< / span > < span class = "w" > < / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "o" > %< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity< / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-59" name = "__codelineno-21-59" href = "#__codelineno-21-59" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-60" name = "__codelineno-21-60" href = "#__codelineno-21-60" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 若 key 不存在,则返回添加点的索引 < / span >
< a id = "__codelineno-21-61" name = "__codelineno-21-61" href = "#__codelineno-21-61" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-62" name = "__codelineno-21-62" href = "#__codelineno-21-62" > < / a > < span class = "w" > < / span > < span class = "n " > index < / span >
< a id = "__codelineno-21-63" name = "__codelineno-21-63" href = "#__codelineno-21-63" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span > < span class = "w" > < / span > < span class = "k " > else < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-64" name = "__codelineno-21-64" href = "#__codelineno-21-64" > < / a > < span class = "w" > < / span > < span class = "n" > first_tombstone< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "kt" > usize < / span >
< a id = "__codelineno-21-65" name = "__codelineno-21-65" href = "#__codelineno-21-65" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-66" name = "__codelineno-21-66" href = "#__codelineno-21-66" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-67" name = "__codelineno-21-67" href = "#__codelineno-21-67" > < / a >
< a id = "__codelineno-21-68" name = "__codelineno-21-68" href = "#__codelineno-21-68" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 查询操作 */ < / span >
< a id = "__codelineno-21-69" name = "__codelineno-21-69" href = "#__codelineno-21-69" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > get< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > key< / span > : < span class = "kt" > i32< / span > < span class = "p" > )< / span > < span class = "w" > < / span > -> < span class = "nb" > Option< / span > < span class = "o" > < & < / span > < span class = "kt" > str< / span > < span class = "o" > > < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-70" name = "__codelineno-21-70" href = "#__codelineno-21-70" > < / a > < span class = "w" > < / span > < span class = "c1" > // 搜索 key 对应的桶索引 < / span >
< a id = "__codelineno-21-71" name = "__codelineno-21-71" href = "#__codelineno-21-71" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > find_bucket< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-72" name = "__codelineno-21-72" href = "#__codelineno-21-72" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 若找到键值对,则返回对应 val < / span >
< a id = "__codelineno-21-73" name = "__codelineno-21-73" href = "#__codelineno-21-73" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > is_some< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-74" name = "__codelineno-21-74" href = "#__codelineno-21-74" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > as_ref< / span > < span class = "p" > ().< / span > < span class = "n" > map< / span > < span class = "p" > (< / span > < span class = "o" > |< / span > < span class = "n" > pair< / span > < span class = "o" > |< / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > val< / span > < span class = "w" > < / span > < span class = "k" > as< / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "kt" > str< / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-75" name = "__codelineno-21-75" href = "#__codelineno-21-75" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-76" name = "__codelineno-21-76" href = "#__codelineno-21-76" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若键值对不存在,则返回 null < / span >
< a id = "__codelineno-21-77" name = "__codelineno-21-77" href = "#__codelineno-21-77" > < / a > < span class = "w" > < / span > < span class = "nb" > None < / span >
< a id = "__codelineno-21-78" name = "__codelineno-21-78" href = "#__codelineno-21-78" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-79" name = "__codelineno-21-79" href = "#__codelineno-21-79" > < / a >
< a id = "__codelineno-21-80" name = "__codelineno-21-80" href = "#__codelineno-21-80" > < / a > < span class = "w" > < / span > < span class = "cm " > /* 添加操作 */ < / span >
< a id = "__codelineno-21-81" name = "__codelineno-21-81" href = "#__codelineno-21-81" > < / a > < span class = "w" > < / span > < span class = "k" > fn < / span > < span class = "nf " > put < / span > < span class = "p " > ( < / span > < span class = "o " > & < / span > < span class = "k " > mut < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > , < / span > < span class = "w " > < / span > < span class = "n" > key< / span > : < span class = "kt" > i32< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > val< / span > : < span class = "nb" > String< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-82" name = "__codelineno-21-82" href = "#__codelineno-21-82" > < / a > < span class = "w" > < / span > < span class = "c1" > // 当负载因子超过阈值时,执行扩容 < / span >
< a id = "__codelineno-21-83" name = "__codelineno-21-83" href = "#__codelineno-21-83" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > load_factor < / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > > ; < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > load_thres < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-84" name = "__codelineno-21-84" href = "#__codelineno-21-84" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > extend< / span > < span class = "p" > () ;< / span >
< a id = "__codelineno-21-85" name = "__codelineno-21-85" href = "#__codelineno-21-85" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-86" name = "__codelineno-21-86" href = "#__codelineno-21-86" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 搜索 key 对应的桶索引 < / span >
< a id = "__codelineno-21-87" name = "__codelineno-21-87" href = "#__codelineno-21-87" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > find_bucket< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-88" name = "__codelineno-21-88" href = "#__codelineno-21-88" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若找到键值对,则覆盖 val 并返回 < / span >
< a id = "__codelineno-21-89" name = "__codelineno-21-89" href = "#__codelineno-21-89" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > is_some< / span > < span class = "p" > () < / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w " > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-90" name = "__codelineno-21-90" href = "#__codelineno-21-90" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > as_mut< / span > < span class = "p" > ().< / span > < span class = "n" > unwrap< / span > < span class = "p" > ().< / span > < span class = "n" > val< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > val< / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-91" name = "__codelineno-21-91" href = "#__codelineno-21-91" > < / a > < span class = "w" > < / span > < span class = "k" > return< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-21-92" name = "__codelineno-21-92" href = "#__codelineno-21-92" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-93" name = "__codelineno-21-93" href = "#__codelineno-21-93" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若键值对不存在,则添加该键值对 < / span >
< a id = "__codelineno-21-94" name = "__codelineno-21-94" href = "#__codelineno-21-94" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nb" > Some< / span > < span class = "p" > (< / span > < span class = "n" > Pair< / span > < span class = "w" > < / span > < span class = "p" > {< / span > < span class = "w" > < / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > val< / span > < span class = "w" > < / span > < span class = "p" > }); < / span >
< a id = "__codelineno-21-95" name = "__codelineno-21-95" href = "#__codelineno-21-95" > < / a > < span class = "w" > < / span > < span class = "bp " > self < / span > < span class = "p " > . < / span > < span class = "n" > size < / span > < span class = "w" > < / span > < span class = "o" > + =< / span > < span class = "w" > < / span > < span class = "mi" > 1 < / span > < span class = "p" > ;< / span >
< a id = "__codelineno-21-96" name = "__codelineno-21-96" href = "#__codelineno-21-96" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-97" name = "__codelineno-21-97" href = "#__codelineno-21-97" > < / a >
< a id = "__codelineno-21-98" name = "__codelineno-21-98" href = "#__codelineno-21-98" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 删除操作 */ < / span >
< a id = "__codelineno-21-99" name = "__codelineno-21-99" href = "#__codelineno-21-99" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > remove< / span > < span class = "p" > (< / span > < span class = "o" > & < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > , < / span > < span class = "w " > < / span > < span class = "n " > key < / span > : < span class = "kt " > i32 < / span > < span class = "p " > ) < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-100" name = "__codelineno-21-100" href = "#__codelineno-21-100" > < / a > < span class = "w" > < / span > < span class = "c1 " > // 搜索 key 对应的桶索引 < / span >
< a id = "__codelineno-21-101" name = "__codelineno-21-101" href = "#__codelineno-21-101" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "n" > index< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > find_bucket< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-102" name = "__codelineno-21-102" href = "#__codelineno-21-102" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若找到键值对,则用删除标记覆盖它< / span >
< a id = "__codelineno-21-103" name = "__codelineno-21-103" href = "#__codelineno-21-103" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ].< / span > < span class = "n" > is_some< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > & & < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > [< / span > < span class = "n" > index< / span > < span class = "p" > ]< / span > < span class = "w" > < / span > < span class = "o" > !=< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-104" name = "__codelineno-21-104" href = "#__codelineno-21-104" > < / a > < span class = "w" > < / span > < span class = "bp " > self< / span > < span class = "p" > . < / span > < span class = "n" > buckets < / span > < span class = "p" > [ < / span > < span class = "n " > index< / span > < span class = "p" > ] < / span > < span class = "w " > < / span > < span class = "o" > = < / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE < / span > < span class = "p " > .< / span > < span class = "n" > clone < / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-105" name = "__codelineno-21-105" href = "#__codelineno-21-105" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > size< / span > < span class = "w" > < / span > < span class = "o" > -=< / span > < span class = "w" > < / span > < span class = "mi" > 1< / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-106" name = "__codelineno-21-106" href = "#__codelineno-21-106" > < / a > < span class = "w" > < / span > < span class = "p" > } < / span >
< a id = "__codelineno-21-107" name = "__codelineno-21-107" href = "#__codelineno-21-107" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-108" name = "__codelineno-21-108" href = "#__codelineno-21-108" > < / a >
< a id = "__codelineno-21-109" name = "__codelineno-21-109" href = "#__codelineno-21-109" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 扩容哈希表 */ < / span >
< a id = "__codelineno-21-110" name = "__codelineno-21-110" href = "#__codelineno-21-110" > < / a > < span class = "w" > < / span > < span class = "k " > fn< / span > < span class = "nf" > extend < / span > < span class = "p" > ( < / span > < span class = "o " > & < / span > < span class = "k" > mut< / span > < span class = "w" > < / span > < span class = "bp " > self< / span > < span class = "p" > ) < / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-111" name = "__codelineno-21-111" href = "#__codelineno-21-111" > < / a > < span class = "w" > < / span > < span class = "c1" > // 暂存原哈希表< / span >
< a id = "__codelineno-21-112" name = "__codelineno-21-112" href = "#__codelineno-21-112" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "n" > buckets_tmp< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "p" > .< / span > < span class = "n" > clone< / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-113" name = "__codelineno-21-113" href = "#__codelineno-21-113" > < / a > < span class = "w" > < / span > < span class = "c1" > // 初始化扩容后的新哈希表 < / span >
< a id = "__codelineno-21-114" name = "__codelineno-21-114" href = "#__codelineno-21-114" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity < / span > < span class = "w" > < / span > < span class = "o" > * =< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > extend_ratio < / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-115" name = "__codelineno-21-115" href = "#__codelineno-21-115" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > buckets< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "fm" > vec!< / span > < span class = "p" > [< / span > < span class = "nb" > None< / span > < span class = "p" > ;< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > capacity< / span > < span class = "p" > ] ;< / span >
< a id = "__codelineno-21-116" name = "__codelineno-21-116" href = "#__codelineno-21-116" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > size< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "mi" > 0< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-21-117" name = "__codelineno-21-117" href = "#__codelineno-21-117" > < / a >
< a id = "__codelineno-21-118" name = "__codelineno-21-118" href = "#__codelineno-21-118" > < / a > < span class = "w" > < / span > < span class = "c1" > // 将键值对从原哈希表搬运至新哈希表< / span >
< a id = "__codelineno-21-119" name = "__codelineno-21-119" href = "#__codelineno-21-119" > < / a > < span class = "w" > < / span > < span class = "k " > for < / span > < span class = "w " > < / span > < span class = "n" > pair< / span > < span class = "w " > < / span > < span class = "k " > in < / span > < span class = "w" > < / span > < span class = "n" > buckets_tmp < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-120" name = "__codelineno-21-120" href = "#__codelineno-21-120" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > is_none< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "o" > ||< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-121" name = "__codelineno-21-121" href = "#__codelineno-21-121" > < / a > < span class = "w" > < / span > < span class = "k" > continue < / span > < span class = "p" > ; < / span >
< a id = "__codelineno-21-122" name = "__codelineno-21-122" href = "#__codelineno-21-122" > < / a > < span class = "w" > < / span > < span class = "p " > } < / span >
< a id = "__codelineno-21-123" name = "__codelineno-21-123" href = "#__codelineno-21-123" > < / a > < span class = "w" > < / span > < span class = "kd " > let < / span > < span class = "w" > < / span > < span class = "n" > pair < / span > < span class = "w " > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n " > pair < / span > < span class = "p" > . < / span > < span class = "n " > unwrap < / span > < span class = "p" > (); < / span >
< a id = "__codelineno-21-124" name = "__codelineno-21-124" href = "#__codelineno-21-124" > < / a >
< a id = "__codelineno-21-125" name = "__codelineno-21-125" href = "#__codelineno-21-125" > < / a > < span class = "w" > < / span > < span class = "bp " > sel f< / span > < span class = "p " > .< / span > < span class = "n" > put< / span > < span class = "p" > ( < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n " > pair < / span > < span class = "p " > .< / span > < span class = "n" > val < / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-126" name = "__codelineno-21-126" href = "#__codelineno-21-126" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-127" name = "__codelineno-21-127" href = "#__codelineno-21-127" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-128" name = "__codelineno-21-128" href = "#__codelineno-21-128" > < / a > < span class = "w" > < / span > < span class = "c m" > /* 打印哈希表 */ < / span >
< a id = "__codelineno-21-129" name = "__codelineno-21-129" href = "#__codelineno-21-129" > < / a > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "nf" > print< / span > < span class = "p" > ( < / span > < span class = "o " > & < / span > < span class = "bp " > s elf< / span > < span class = "p" > ) < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-130" name = "__codelineno-21-130" href = "#__codelineno-21-130" > < / a > < span class = "w" > < / span > < span class = "k" > for < / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "w" > < / span > < span class = "k " > in < / span > < span class = "w" > < / span > < span class = "o " > & < / span > < span class = "b p" > self < / span > < span class = "p " > . < / span > < span class = "n " > buckets < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-131" name = "__codelineno-21-131" href = "#__codelineno-21-131" > < / a > < span class = "w" > < / span > < span class = "k " > if < / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > is_none< / span > < span class = "p " > () < / span > < span class = "w " > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-132" name = "__codelineno-21-132" href = "#__codelineno-21-132" > < / a > < span class = "w" > < / span > < span class = "fm" > println!< / span > < span class = "p" > (< / span > < span class = "s" > " null" < / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-133" name = "__codelineno-21-133" href = "#__codelineno-21-133" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "w" > < / span > < span class = "o" > ==< / span > < span class = "w" > < / span > < span class = "o" > & < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > TOMBSTONE< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-134" name = "__codelineno-21-134" href = "#__codelineno-21-134" > < / a > < span class = "w" > < / span > < span class = "fm" > println!< / span > < span class = "p" > (< / span > < span class = "s" > " TOMBSTONE" < / span > < span class = "p" > ); < / span >
< a id = "__codelineno-21-135" name = "__codelineno-21-135" href = "#__codelineno-21-135" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "p" > { < / span >
< a id = "__codelineno-21-136" name = "__codelineno-21-136" href = "#__codelineno-21-136" > < / a > < span class = "w" > < / span > < span class = "kd" > let< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > as_ref< / span > < span class = "p" > ().< / span > < span class = "n" > unwrap< / span > < span class = "p" > ();< / span >
< a id = "__codelineno-21-137" name = "__codelineno-21-137" href = "#__codelineno-21-137" > < / a > < span class = "w" > < / span > < span class = "fm" > println!< / span > < span class = "p" > (< / span > < span class = "s" > " {} -> {}" < / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > pair< / span > < span class = "p" > .< / span > < span class = "n" > val< / span > < span class = "p" > );< / span >
< a id = "__codelineno-21-138" name = "__codelineno-21-138" href = "#__codelineno-21-138" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-139" name = "__codelineno-21-139" href = "#__codelineno-21-139" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-140" name = "__codelineno-21-140" href = "#__codelineno-21-140" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< a id = "__codelineno-21-141" name = "__codelineno-21-141" href = "#__codelineno-21-141" > < / a > < span class = "p" > }< / span >
< / code > < / pre > < / div >
< / div >
< div class = "tabbed-block" >