Android: ArrayMap&SparesArray的基本使用及主要事项

一.产生的原因

ArrayMapAndroid专门针对内存优化而设计的,用于替代Java API中的HashMap数据结构.为了进一步优化key类型为intmap,Android再次提供效率更高的数据结构SparseArray,可避免自动装箱过程。
如果key类型为其他类型,可以使用ArrayMap.

HashMap的查找和插入时间复杂度为O(1)的代价是牺牲大量的内存,ArrayMapSparesArray性能略逊于HashMap,但更节约内存.

二.ArrayMap的使用

三.SparesArray的使用

四.优缺点及使用注意:

(一)注意事项:

1.最低 minSdkVersion
使用ArrayMapSparseArray 要求最低(含)的 minSdkVersion 为19

2.hashMap实现了Serializable接口, ArrayMapSparseArray未实现,所以不能直接进行序列化.

3.适用于存储元素个数<1000,

(二)优缺点

1. ArrayMap

ArrayMap的设计是为了更加高效地利用内存,高效体现在以下几点:

优点

  1. ArrayMap使用更少的存储单元存储元素
  2. ArrayMap使用int类型的数组存储hash,使用Object类型数组存储k-v键值对,相较于HashMap使用Node存储节点,ArrayMap存储一个元素占用的内存更小。
  3. ArrayMap在扩容时容量变化更小.HashMap在扩容的时候,通常会将容量扩大一倍,而ArrayMap在扩容的时候,如果元素个数超过8,最多扩大自己的1/2。

缺点

  1. 存储大量(超过1000)元素时比较耗时
  2. 在对元素进行查找或者确定待插入元素的位置时使用二分查找,当元素较多时,耗时较长
  3. 频繁扩容和缩容,可能会产生大量复制操作
  4. ArrayMap在扩容和缩容时需要移动元素,且扩容时容量变化比HashMap小,扩容和缩容的频率可能更高,元素数量过多时,元素的移动可能会对性能产生影响。

2.SparseArray

优点

  1. 通过它的三兄弟可以避免存取元素时的装箱和拆箱
  2. 频繁的插入删除操作效率高(延迟删除机制保证了效率)
  3. 会定期通过gc函数来清理内存,内存利用率高
  4. 放弃hash查找,使用二分查找,更轻量

缺点

  1. 二分查找的时间复杂度O(log n),大数据量的情况下,效率没有HashMap
  2. key只能是int 或者long
  3. 存取的value为指定类型的,比如booleanintlong,可以避免自动装箱和拆箱问题。

你可能感兴趣的:(Android性能)