SparseArray の実装を見ると、SparseArray の get() メンバーが binary-検索 (O(log N)) に対して、HashMap では配列インデックス (O(1)) を使用します。
両方のクラスに get() メソッドの実装を (そのまま) 提供します。
public V get(Object key) { // for HashMap
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
public E get(int key, E valueIfKeyNotFound) { //for SparseArray
int i = binarySearch(mKeys, 0, mSize, key);
if (i < 0 || mValues[i] == DELETED) {
return valueIfKeyNotFound;
} else {
return (E) mValues[i];
}
}
SparseArray 内のキーの存在を確認するために indexOfKey(key) < 0 または get(key) == null を使用するかどうかについては、どちらも下でバイナリ検索を使用するため、何でも構いません。
public int indexOfKey(int key) { // for SparseArray
if (mGarbage) {
gc();
}
return binarySearch(mKeys, 0, mSize, key);
}