Android如何使用SparseArray


介绍

SparseArrayMap的替代方案。 Map需要将其键作为对象。当我们想要使用原始int值作为键时,会发生自动装箱现象。编译器自动将原始值转换为其盒装类型(例如intInteger )。内存占用量的差异是显而易见的: int使用4个字节, Integer使用16个字节。 SparseArray使用int作为键值。

备注

优势:

  • 内存使用量减少(因为原始密钥)。
  • 没有自动拳击。

坏处 :

  • SparseArray使用二进制搜索查找值(O(log n)),因此如果必须使用大量元素(使用HashMap),它可能不是最佳解决方案。

该族有以下几种变体:-SparseArray <Integer,Object> -SparseBooleanArray <Integer,Boolean> -SparseIntArray <Integer,Integer> -SparseLongArray <Integer,Long> -LongSparseArray <Long,Object> -LongSparseLongArray <Long,Long >

SparseArray操作

  • 添加元素 - put(int,x):添加从指定键到指定值的映射,如果有指定键,则替换先前映射。 - append(int,x):将键/值对放入数组中,针对键大于数组中所有现有键的情况进行优化。您应该在顺序键的情况下使用append()来优化性能。否则put()很好。

  • 删除元素 - 删除(int):从指定的键中删除映射(如果有)。 - removeAt(int):删除给定索引处的映射。 - removeAtRange(int,int):删除一系列映射作为批处理。

  • access element - get(int):获取从指定键映射的int,如果没有这样的映射,则返回0。 - get(int,E):获取从指定键映射的int,如果没有进行这样的映射,则获取指定的值。 - valueAt(int):给定范围为0 ... size() - 1的索引,返回此SparseIntArray存储的indexth键值映射中的值。指数按升序排列。

  • index / key search - keyAt(int):给定范围为0 ... size() - 1的索引,返回此SparseIntArray存储的indexth键值映射中的键。指数按升序排列。 - valueAt(int):给定范围为0 ... size() - 1的索引,返回此SparseIntArray存储的indexth键值映射中的值。指数按升序排列。 - indexOfKey(int):返回keyAt(int)将返回指定键的索引,如果未映射指定键,则返回负数。 - indexOfValue(E):返回valueAt(int)将返回指定键的索引,如果没有键映射到指定值,则返回负数。请注意,这是一个线性搜索,不像按键查找,并且多个键可以映射到相同的值,这将只找到其中​​一个。它们的内存占用差异很明显:int使用4个字节,Integer使用16个字节.SparseArray使用int作为键值。

如何使用SparseArray 相关例子