我最近开始使用 Android SparseArray 代替 ArrayList 来处理少量项目。我想知道为什么它不像普通 ArrayList 那样包含 toArray() 方法?它包含一个用于值的私有(private)对象数组,但无法返回它们。在我看来,这将是一种有用的方法,因为 ArrayList 到数组的转换在 Android 中很常见。我假设由于散列的工作方式,它会返回一个带有空槽的数组?
我的第二个问题是,将 SparseArray 转换为普通对象数组的最有效方法是什么?
最佳答案
要回答你的问题的标题,没有方法,因为 SparseArray 不是数组,它实际上是 HashMap 的优化,将任意整数绑定(bind)到任意值。优化在于它不使用 HashMap 会使用的装箱/拆箱。
然后是第二部分,你应该如何将它转换为数组,我建议使用 size() 和 keyAt(index)
确定最大的数组索引,然后分配一个适当的数组大小,最后使用具有合理默认值的 get(index, default)
方法复制所有值。
关于java - 为什么我不能将 SparseArray 转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31837901/