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