静态"删除"的目的是什么?宾语?

时间:2012-09-25 16:06:30

标签: java android

在Android类SparseArray中,静态最终变量DELETED被定义为简单Object。在类的后面,它的引用被用作添加到容器中的已删除实体的标识符。为什么被删除的实体不仅仅被淘汰了?区分空槽和删除槽的目的是什么?

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

1 个答案:

答案 0 :(得分: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

如果您将DELETED替换为null,则会获得someDefault