由SparseArray實施走出去似乎違反直覺的,它可能比HashMap的更好的性能(時間複雜度)(小於空間需求等這對於移動環境是有意義的),因爲SparseArray的get()成員使用二進制搜索(O(log N)),而HashMap使用數組索引(O(1))。
提供了get()方法實現了兩個類(AS-IS):
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(鍵)< 0或獲得(鍵)== NULL檢查存在在SparseArray中的關鍵字,任何事情都可以,因爲它們都在下面使用二進制搜索。
public int indexOfKey(int key) { // for SparseArray
if (mGarbage) {
gc();
}
return binarySearch(mKeys, 0, mSize, key);
}
謝謝山姆,在重載的好位置,我已經與你的建議,只是取代if(get(key)!= null)。 – magritte