Java SparseArray

转载请注明链接:https://blog.csdn.net/feather_wch/article/details/81538653

SparseArray

版本: 2018/8/9-1(13:19)


1、SparseArray是什么?

  1. Android因为手机性能和内存有限,提供了一套高效的工具。SparseArray就是其中之一。
  2. SparseArray是Android特有的稀疏数组的实现,用于替换HashMap中Key = Integer,Value=Object的情况。
  3. SparseArray的效率相比于HashMap并没有多少提升。数据量达到10万条时,正序插入方面SparseArray效率高,倒序插入HashMap比SparseArray快很多,查询方面HashMap却会更快一点。
  4. SparseArray在数据量达到10万条时,内存方面能比HashMap节约27%。
    1.

2、SparseArray的特点

  1. 适合Key=Integer,Value=Object的情况
  2. 内存占用更小.(根据情况进行取舍)
  3. 线程不安全
  4. 少量数据时SpareArray比较适合,大量数据时HashMap的性能更高。

3、SparseArray家族的四种集合

//用于替换    HashMap<Integer,String>
SparseArray<String> SparseArray11=new SparseArray<String>();
SparseArray11.append(1,"dd");

//用于替换    HashMap<Integer,boolean>
SparseBooleanArray sparseBooleanArray=new SparseBooleanArray();
sparseBooleanArray.append(1,false);

//用于替换    HashMap<Integer,int>
SparseIntArray SparseIntArray=new SparseIntArray();
SparseIntArray.append(1,1);

//用于替换    HashMap<Integer,long>
SparseLongArray SparseLongArray=new SparseLongArray();
SparseLongArray.append(1,1111000L);

插入

4、SparseArray的插入效率

  1. 每次插入都选择二分查找,因此在倒序插入的时候情况汇恒糟糕。
  2. HashMap的插入,会进行冲突处理,而不需要遍历每个值。因此效率更高。

删除

设计模式

5、SparseArray采用的设计模式

  1. 原型模式
  2. 原型模式内存中复制数据,不会调用到类的构造的方法.
  3. 原型模式内访问权限对原型模式无效。

SparseArray和HashMap性能对比

6、SparseArray和HashMap的性能

数据量插入速度内存大小查找速度
10,0000正序SparseArray插入略快SparseArray内存占用小27%HashMap胜出
倒序HashMap要快一个数量级SparseArray内存占用小27%HashMap胜出

SparseArray、HashMap、ArrayMap性能对比

1、正序插入性能排名(最优情况)
正序插入

  1. SparseArray NO1
  2. ArrayMap NO2
  3. HashMap NO3

2、倒序插入性能排名(最差情况)
倒序插入

  1. HashMap NO1:30%的优化
  2. SparseArray NO2
  3. ArrayMap NO3

3、内存占用比
内存占用比

  1. SparseArray NO1
  2. HashMap、ArrayMap NO2

4、查询性能对比
查询性能对比-直接对比
查询性能对比-去除装箱

  1. 直接对比图是有一定问题的,在数据量达到10万的时候HashMap性能也是最好的,因此会有一个反超过程。

5、总结

  1. 正序插入(最快):1-SparseArray 2-ArrayMap 3-HashMap
  2. 倒序插入(最快): 1-HashMap 2-SparseArray 3-ArrayMap
  3. 内存占用比(最少):1-SparseArray 2-ArrayMap/HashMap
  4. 查询速度: 1-HashMap 2-SparseArray 3-ArrayMap
    因此数据量大时,HashMap最好。如果想解决空间或者数据较少时,SparseArray更好。

参考资料

  1. Android性能优化之谈谈SparseArray,SparseBooleanArray和SparseIntArray
  2. Android学习笔记之性能优化SparseArray
  3. HashMap,ArrayMap,SparseArray源码分析及性能对比
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值