当前位置:   article > 正文

SparseArray 与 HashMap 的性能对比_sparse hashmap

sparse hashmap

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

做一个性能测试


  1. val hashMap = HashMap<Int, String>()
  2. val sparseArray = SparseArray<String>()
  3. val hashTime = System.currentTimeMillis()
  4. for (i in 0..1000000) {
  5. hashMap.put(i,"w")
  6. hashMap.get(i)
  7. }
  8. Log.e("kang", "hashMap存取一百万次耗时:" + (System.currentTimeMillis() - hashTime))
  9. val sparseTime = System.currentTimeMillis()
  10. for (i in 0..1000000) {
  11. sparseArray.put(i,"k")
  12. sparseArray.get(i)
  13. }
  14. Log.i("kang", "sparseArray存取一百万次耗时:" + (System.currentTimeMillis() - sparseTime))
  15. 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 提供的更丰富的功能可能更适合需求。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/666319
推荐阅读
相关标签
  

闽ICP备14008679号