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文档
正在删除数组中的项
因为它避免了自动装箱键,并且其数据结构不会 每个映射依赖一个额外的条目对象
简而言之,;当键为基元类型时,可以使用稀疏数组替换哈希映射。
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%。”