赞
踩
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 提供的更丰富的功能可能更适合需求。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。