Android クラスSparseArrayでは、 static final 変数DELETED
が単純な として定義されていObject
ます。クラスの後半で、その参照は、コンテナに追加された削除済みエンティティの識別子として使用されます。削除されたエンティティが無効にされないのはなぜですか? null スロットと削除されたスロットを区別する目的は何ですか?
注: SparseArray クラスについて直接質問していますが、質問は一般的なものです。
Android クラスSparseArrayでは、 static final 変数DELETED
が単純な として定義されていObject
ます。クラスの後半で、その参照は、コンテナに追加された削除済みエンティティの識別子として使用されます。削除されたエンティティが無効にされないのはなぜですか? null スロットと削除されたスロットを区別する目的は何ですか?
注: 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
されます。