SpareArray

文章目录

概述

  • 采用了延迟删除的机制,通过将删除 key 的 value 设置 DELETED,方便之后对该下标的存储进行复用;
  • 使用二分查找,时间复杂度为 O(logn),如果没有查找到,那么取反返回左边界,再取反后,左边界即为应该插入的数组下标;
  • 如果无法直接插入,则根据 mGarbage 标识(是否有潜在延迟删除的无效数据),进行数据清除,再通过 System.arraycopy 进行数组前移,将目标元素插入二分查找左边界对应的下标;
  • mSize 小于等于 keys.length,小于的部分为空数据或者是 gc 后前移的数据的原数据(也是无效数据),因此二分查找的右边界以 mSize 为准;mSize 包含了延迟删除后的元素个数;
  • 如果遇到频繁删除,不会触发 gc 机制,导致 mSize 远大于有效数组长度,造成性能损耗;
  • 根据源码,可能触发 gc 操作的方法有(1、put;2、与index有关的所有操作,setValueAt() 等;3、size()方法;)
  • mGarbage 为 true 不一定有无效元素,因为可能被删除的元素恰好被新添加的元素覆盖。

使用场景

key为整型;
不需要频繁的删除;
元素个数相对较少;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值