3

在 Android 类SparseArray中,一个静态的 final 变量DELETED被定义为一个简单的Object. 稍后在类中,它的引用用作添加到容器中的已删除实体的标识符。为什么被删除的实体不只是被清空?区分空槽和已删除槽的目的是什么?

注意:直接询问 SparseArray 类时,问题是一般性的。

4

1 回答 1

5

这是因为null是一个有效值存储在数组中,所以你需要能够区分nullDELETED

作为为什么需要区分它们的示例,请考虑get(key, default)

 @SuppressWarnings("unchecked")
 public E get(int key, E valueIfKeyNotFound) {
     int i = binarySearch(mKeys, 0, mSize, key);

     if (i < 0 || mValues[i] == DELETED) {
         return valueIfKeyNotFound;
     } else {
         return (E) mValues[i];
     }
 }

现在,如果您执行以下操作:

array.put(1, null);
array.get(1, someDefault);

你会(正确地)得到null.

如果你用 替换DELETEDnull你会得到someDefault

于 2012-09-25T16:14:00.813 回答