由于 SparseArray 的 get() 成员使用二进制-搜索 (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];
    }
}
至于是否使用 indexOfKey(key) < 0 或 get(key) == null 来检查 SparseArray 中的键是否存在,任何事情都可以,因为两者都在下面使用二进制搜索。
public int indexOfKey(int key) {  // for SparseArray
    if (mGarbage) {
        gc();
    }
    return binarySearch(mKeys, 0, mSize, key);
}