3

Android クラスSparseArrayでは、 static final 変数DELETEDが単純な として定義されていObjectます。クラスの後半で、その参照は、コンテナに追加された削除済みエンティティの識別子として使用されます。削除されたエンティティが無効にされないのはなぜですか? null スロットと削除されたスロットを区別する目的は何ですか?

注: SparseArray クラスについて直接質問していますが、質問は一般的なものです。

4

1 に答える 1

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

に置き換えるDELETEDnull、代わりに取得someDefaultされます。

于 2012-09-25T16:14:00.813 に答える