为什么可以'我将SparseArray转换为数组?

时间:2015-08-05 16:22:02

标签: java android arraylist

我最近开始使用Android SparseArray代替ArrayList来处理少量项目。我想知道它为什么不包含像普通ArrayList一样的toArray()方法?它包含值的私有对象数组,但无法返回它们。在我看来,这将是一个有用的方法,因为ArrayList到阵列转换在Android中很常见。我假设因为哈希工作的方式,它将返回一个空插槽的数组?

我的第二个问题是,将SparseArray转换为普通Object数组的最有效方法是什么?

3 个答案:

答案 0 :(得分:6)

要回答问题的标题,没有方法可以做到这一点因为SparseArray不是数组,它实际上是HashMap的优化,将任意整数绑定到任意值。优化在于它不使用HashMap所需的装箱/拆箱。

然后第二部分,你应该如何将它转换为数组,我建议使用size()和keyAt(index)确定最大的数组索引,然后分配一个适当大小的数组,最后复制所有使用get(index, default)方法的值具有合理的默认值。

答案 1 :(得分:0)

没有这样做的方法,但你可以转换SparseArray迭代:

//Split string based on "$%"
String[] values = thisString.split(Pattern.quote("$%"));
Customer.firstName() = values[0]; //Set first name equal to first string from the split
//etc

答案 2 :(得分:0)

科特林版本:

    private inline fun <reified VALUE> SparseArray<VALUE>.toArrayOrNull(): Array<VALUE>? {
        return if (isNotEmpty()) {
            Array<VALUE>(size()) { index -> this[index] }
        } else {
            null
        }
    }