Android SparseArray和Hashmap之间的区别?

Android SparseArray和Hashmap之间的区别?,android,hashmap,sparse-matrix,Android,Hashmap,Sparse Matrix,我想知道SparseArray和HashMap之间的性能和效率,以及使用哪一种更好。我无法确定何时使用SparseArray以及何时使用SparseArray的Android文档 它通常比传统的HashMap慢,因为查找 需要二进制搜索,添加和删除需要插入和 正在删除数组中的项 它旨在增加内存 比使用HashMap将整数映射到对象更有效,两者都是 因为它避免了自动装箱键,并且其数据结构不会 每个映射依赖一个额外的条目对象 简而言之,;当键为基元类型时,可以使用稀疏数组替换哈希映射。SparseA

我想知道
SparseArray
HashMap
之间的性能和效率,以及使用哪一种更好。我无法确定何时使用SparseArray以及何时使用SparseArray的Android文档

  • 它通常比传统的HashMap慢,因为查找 需要二进制搜索,添加和删除需要插入和
    正在删除数组中的项

  • 它旨在增加内存 比使用HashMap将整数映射到对象更有效,两者都是
    因为它避免了自动装箱键,并且其数据结构不会 每个映射依赖一个额外的条目对象


  • 简而言之,;当键为基元类型时,可以使用稀疏数组替换哈希映射。

    SparseArray
    是当映射键为整数时应该做出的选择,并且这些整数不是顺序的,这意味着不是0、1、2、3、4。。。但更像是432045,12,5

    现在,让我们假设键是整数,但也是顺序的(0,1,2,3,4,…n)。在这种情况下,收藏的最佳选择是什么?那么,让我们假设您的值是
    字符串
    。在这种情况下,您在这里的最佳选择是
    String
    数组(
    String[]
    )。原因是
    字符串
    数组满足您的所有需求,对性能的影响最小

    mystringaray[0]
    将返回键“0”的
    字符串值,依此类推

    SparseArray
    的工作原理与此完全相同,只是我们允许数组中的某些值为空(因此称为“稀疏”)。
    SparseArray
    将在幕后创建一个大型数组,并使用整数键作为放置值的数组的索引

    本质上,
    HashMaps
    也是这样工作的——在幕后有一个用于放置值的大型整数数组。唯一的区别是在HashMaps中,键不是整数,它们可以是任何东西。在我们的示例中,假设键是
    字符串
    HashMap
    将使用哈希函数将该
    字符串
    键转换为整数,然后使用该值在数组中定位值。这可能导致两个不同的
    字符串产生相同的整数。在这些情况下,
    HashMap
    将执行另一个操作,例如将数组中的值排队,或生成新的键,等等。这一点,以及通过哈希函数生成整数密钥,有时可能会涉及相当多的性能


    SparseArray
    允许您完全跳过此操作,因为对于整数键,这些操作都不是必需的,因此效率更高

    非常好的解释。如果你没有撒谎,那么如果你有“可能包含大量项的数据结构”,你应该使用HashMaps,因为SparSearray“并不适合”这种情况。你的结论似乎是错误的:“该实现不适用于可能包含大量项的数据结构。它通常比传统的HashMap慢,因为查找需要二进制搜索,添加和删除需要在数组中插入和删除项。对于容纳数百项的容器,性能不同nce不显著,低于50%。”