zoukankan      html  css  js  c++  java
  • Android特有集合 SparseArray/ArrayMap/ArraySet

    使用HashMap会涉及一个要求:key与value必须为对象类型,而不能为基本类型。这就导致了本可以基本类型的数据必须转换为其对象包装类型(int->Integer,long->Long......),这就涉及到需要占用更多内存以及拆箱装箱频繁转换问题。

    为此Google专门设计了当key为基本类型时的替换Map容器:SparseArray 系列,原理是key存储在int[]  mKeys数组内,value存储在对应的(int,long,object)[]  mValues数组内,采用二分法计算索引位置.

    SparseArray -> map int to Object
    SparseBooleanArray -> map int to boolean
    SparseIntArray -> map int to integer
    SparseLongArray -> map int to long
    LongSparseArray -> map long to Object

    SparseArray

    该集合类型可以避免自动装箱减少内存的消耗; 对于大量的数据性能不如Java提供的Map集合(二分查询的缺陷);

    集合内部维护了两个数组; 一个是对应key,另外一个对应value。

    SparseIntArray这些就是避免自动装箱的集合, 只支持固定的基本类型; 但是他们都只支持key的类型是int, 并且不支持迭代器遍历;

    ArrayMap

    该集合类型和SparseArray同样基于二分查询, 对于千以内的数据量Google推荐使用, 大量数据同样性能不佳;

    并且该集合类型不能解决自动装箱问题, 但是也能减少内存消耗;

    相比SparseArray就是支持自定义Key的类型。

    ArraySet

    该集合和ArrayMap类似, 只不过不是映射关系而已;

    ArraySet支持迭代器。

  • 相关阅读:
    SDOI2008]仪仗队
    洛谷P1414 又是毕业季II
    P3865 【模板】ST表
    [HAOI2007]理想的正方形
    noip 2011 选择客栈
    [AHOI2009]中国象棋
    洛谷P3387 【模板】缩点
    [SCOI2005]最大子矩阵
    [CQOI2009]叶子的染色
    LibreOJ #116. 有源汇有上下界最大流
  • 原文地址:https://www.cnblogs.com/wytiger/p/12974607.html
Copyright © 2011-2022 走看看