在 Android 类SparseArray中,一个静态的 final 变量DELETED
被定义为一个简单的Object
. 稍后在类中,它的引用用作添加到容器中的已删除实体的标识符。为什么被删除的实体不只是被清空?区分空槽和已删除槽的目的是什么?
注意:直接询问 SparseArray 类时,问题是一般性的。
在 Android 类SparseArray中,一个静态的 final 变量DELETED
被定义为一个简单的Object
. 稍后在类中,它的引用用作添加到容器中的已删除实体的标识符。为什么被删除的实体不只是被清空?区分空槽和已删除槽的目的是什么?
注意:直接询问 SparseArray 类时,问题是一般性的。
这是因为null
是一个有效值存储在数组中,所以你需要能够区分null
和DELETED
。
作为为什么需要区分它们的示例,请考虑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
.
如果你用 替换DELETED
,null
你会得到someDefault
。