SparseArray键存在性检查及指定键元素删除方法咨询
关于SparseArray的两个常见问题解答
问题一:如何简便检查SparseArray中是否存在指定键?
确实,SparseArray没有直接提供containsKey()方法,但我们可以利用它自带的indexOfKey(key: Int)方法来实现这个功能——当返回值为-1时,说明键不存在;反之则存在。
如果你想让代码更直观,完全可以给SparseArray写个扩展函数,用起来和HashMap的containsKey()一模一样:
// Kotlin扩展函数,全局或局部定义都可以 fun SparseArray<*>.containsKey(key: Int): Boolean { return indexOfKey(key) != -1 }
之后直接调用sparseArray.containsKey(id.toInt())就能快速判断键是否存在了。
问题二:如何正确实现「键存在则删除对应元素」的需求?
你当前的代码存在两个小问题:
- 判断
sparseArray!!.size()>0完全没必要——数组不为空不代表目标键一定存在; - 如果
indexOfKey(id.toInt())返回-1(键不存在),调用removeAt(-1)会直接抛出异常。
其实SparseArray本身就提供了更简单安全的解决方案:直接使用remove(key: Int)方法!这个方法会自动处理键不存在的情况(不会报错,也不会执行任何无效操作),所以你只需要一行代码就能完成需求:
sparseArray?.remove(id.toInt())
如果一定要用索引的方式实现,正确的写法应该是先判断索引是否合法:
val key = id.toInt() val index = sparseArray?.indexOfKey(key) ?: -1 if (index != -1) { sparseArray?.removeAt(index) }
不过显然直接调用remove(key)更简洁高效。
内容的提问来源于stack exchange,提问作者avez raj
相关产品推荐
相关产品推荐

