美文网首页
android 容器--SparseArray

android 容器--SparseArray

作者: 往事一块六毛八 | 来源:发表于2019-11-05 15:16 被阅读0次

    概要

    概括的说,SparseArray<E>是用于在Android平台上替代HashMap的数据结构,更具体的说,
    是用于替代key为int类型,value为Object类型的HashMap。
    和ArrayMap类似,它的实现相比于HashMap更加节省空间,而且由于key指定为int类型,也可以节省int-Integer的装箱拆箱操作带来的性能消耗。

    它仅仅实现了implements Cloneable接口,所以使用时不能用Map作为声明类型来使用。

    它也是线程不安全的,允许value为null。

    从原理上说,
    它的内部实现也是基于两个数组。
    一个int[]数组mKeys,用于保存每个item的key,key本身就是int类型,所以可以理解hashCode值就是key的值.
    一个Object[]数组mValues,保存value。容量和key数组的一样。

    类似ArrayMap,
    它扩容的更合适,扩容时只需要数组拷贝工作,不需要重建哈希表。

    比传统的HashMap时间效率低。
    因为其会对key从小到大排序,使用二分法查询key对应在数组中的下标。
    在添加、删除、查找数据的时候都是先使用二分查找法得到相应的index,然后通过index来进行添加、查找、删除等操作。

    另外,SparseArray为了提升性能,在删除操作时做了一些优化:
    当删除一个元素时,并不是立即从value数组中删除它,并压缩数组,
    而是将其在value数组中标记为已删除。这样当存储相同的key的value时,可以重用这个空间。
    如果该空间没有被重用,随后将在合适的时机里执行gc(垃圾收集)操作,将数组压缩,以免浪费空间

    https://www.jianshu.com/p/25ccfe46faf5

    相关文章

      网友评论

          本文标题:android 容器--SparseArray

          本文链接:https://www.haomeiwen.com/subject/jpzsbctx.html