SparseArray 与 HashMap 的性能对比

SparseArray 是 Android 系统提供的一种数据结构,用于在内存中存储稀疏的数据集合。相比之下,HashMap 是 Java 标准库提供的一种数据结构,用于存储键值对。

做一个性能测试:


    val hashMap = HashMap<Int, String>()
    val sparseArray = SparseArray<String>()

    val hashTime = System.currentTimeMillis()
    for (i in 0..1000000) {
        hashMap.put(i,"w")
        hashMap.get(i)
    }
    Log.e("kang", "hashMap存取一百万次耗时:" + (System.currentTimeMillis() - hashTime))

    val sparseTime = System.currentTimeMillis()
    for (i in 0..1000000) {
        sparseArray.put(i,"k")
        sparseArray.get(i)
    }
    Log.i("kang", "sparseArray存取一百万次耗时:" + (System.currentTimeMillis() - sparseTime))
    Log.d("kang", "==========================")

运行后结果:

 从这一百万次的存取时间对比,确实能够替代HashMap且效率更高


上面的key和value都是<Int,String>

如果HashMap的key用String类型后运行就会惊人的发现:

 这个HashMap的耗时就会猛增

所以HashMap的key用int类型比String类型性能要高不少(从例子上是高了3倍左右)


SparseArray 可以代替 HashMap 的主要原因是其在某些场景下具有更好的性能更低的内存消耗。具体来说,以下是 SparseArray 相对于 HashMap 的优势

内存消耗较低:SparseArray 是为了存储稀疏数据而设计的,它避免了 HashMap 在内部使用的数组和链表结构的额外内存开销。在数据集合中,如果键值对的数量较少,使用 SparseArray 可以显著降低内存占用。

性能较好:由于 SparseArray 的内部实现采用了稀疏数组的形式,它可以通过直接计算索引的方式进行元素访问,而不需要像 HashMap 那样使用哈希函数计算哈希值。这使得 SparseArray 在访问元素时具有更高的性能。


尽管 SparseArray 在某些方面优于 HashMap,但它也有一些限制和适用条件:

键类型限制:SparseArray 的键类型只能是整型(int)。

功能相对有限:相对于 HashMap,SparseArray 的功能相对有限。HashMap 提供了更多的方法和功能,例如迭代器、键值对的移除等。


因此,在选择使用 SparseArray 还是 HashMap 时,需要根据具体的使用场景和需求进行权衡。如果数据集合是稀疏的且键类型为整型,同时对内存消耗和性能有较高要求,那么 SparseArray 可以是一个更合适的选择。否则,HashMap 提供的更丰富的功能可能更适合需求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值