代码拉取完成,页面将自动刷新
package bzgncmap
import "sync/atomic"
// 缩容
func (m *Map[K, V]) shrink() {
length := int32(len(m.m))
// 计算是否需要缩容
if capacity, ok := calcCapacity(m.count, length); ok {
m.putFunc(func(ms map[K]V) { m.newMap(capacity) })
}
}
// 计算是否需要缩容
func calcCapacity(c, l int32) (int32, bool) {
if c <= 64 {
return c, false
}
if c > 2048 && (c/l >= 2) {
factor := 0.625
return int32(float32(c) * float32(factor)), true
}
if c <= 2048 && (c/l >= 4) {
return c / 2, true
}
return c, false
}
// 创建新map
func (m *Map[K, V]) newMap(length int32) {
newM := make(map[K]V, length)
for k, v := range m.m {
newM[k] = v
}
m.m = newM
atomic.StoreInt32(&m.count, length)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。