在Android类SparseArray中,静态最终变量DELETED
被定义为简单Object
。在类的后面,它的引用被用作添加到容器中的已删除实体的标识符。为什么被删除的实体不仅仅被淘汰了?区分空槽和删除槽的目的是什么?
注意:在直接询问SparseArray类时,问题一般就是。
答案 0 :(得分:5)
这是因为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
。