2015-11-19 124 views
1

通过sparseArray使用ArrayList是否有优势?一个sparseArray是更好的内存管理,它不会像ArrayList那样将空值放入空槽中。但是,你会总是推荐我使用一个SparseArray来覆盖一个非常常用的ArrayList吗?在Java中,我什么时候可以通过sparseArray使用ArrayList?

要清楚,我不是问什么是sparseArray(我已经在上面定义了它),我问什么时候会想通过sparseArray使用ArrayList。

+0

http://stackoverflow.com/questions/25444226/difference-between-sparsearray-vs-arraylist解释它。 – Maroun

+1

请阅读我的问题?我问什么时候一个ArrayList更有利于一个sparseArray,该链接是为了区别sparseArray。 – j2emanue

+0

我没有downvote,请不要要求人们取消选票。 – Maroun

回答

3

当列表是而不是稀疏时,ArrayList需要的内存少于SparseArray,并且按O(1)中的索引访问,而不是O(log n)。

SparseArray class documentation

注意,该容器保持其映射在一个阵列,使用二进制搜索来查找密钥。该实现不适用于可能包含大量项目的数据结构。它通常比传统的HashMap慢,因为查找需要二分搜索并添加和删除需要插入和删除数组中的条目。对于容纳数百种物品的容器,性能差异不显着,小于50%。

+0

我想现在我的理解。所以如果我有一个列表,我知道提前知道插槽中会有很多空白,那么我会使用一个sparseArray。如果我知道有最小量的空插槽,我可以使用ArrayList,对吗? – j2emanue

+0

另外,当你说“不稀疏”时,你的意思是几乎没有空插槽,对吧? – j2emanue

+0

稀疏数组的空槽数多于非空数组。如果你有很少的空插槽,ArrayList的选择是清楚的。如果数组很稀疏,则*可能需要一个SparseArray,具体取决于潜在空插槽的比例和您的要求是否需要权衡较慢内存访问速度。在某些情况下,你可能想用ArrayList表示一个稀疏数组,当更快的访问对你来说比额外的内存更重要时。 –

相关问题