indexOfValue(E)
方法总是返回-1,而我确定我的E
对象存在于我的SparseArray
对象中,为什么?我有:
static final SparseArrayCompat<Long> LOCATION_SHARING_TIME = new SparseArrayCompat<Long>();
static {
LOCATION_SHARING_TIME.put(0, LOCATION_SHARING_TIME_5s);
LOCATION_SHARING_TIME.put(1, LOCATION_SHARING_TIME_1m);
LOCATION_SHARING_TIME.put(2, LOCATION_SHARING_TIME_5m);
LOCATION_SHARING_TIME.put(3, LOCATION_SHARING_TIME_30m);
LOCATION_SHARING_TIME.put(4, LOCATION_SHARING_TIME_1h);
}
我无法使用 SparseLongArray,因为它支持 API 18+,而我的项目至少支持 API 9。
因为它使用 == 而不是相等来确定相等性。请参阅该方法的实现:
public int indexOfValue(E value) {
if (mGarbage) {
gc();
}
for (int i = 0; i < mSize; i++)
if (mValues[i] == value)
return i;
return -1;
}
一个想法是扩展 SparseArray 并覆盖将 == 替换为 equal.
public int indexOfValue(E value) {
if (mGarbage) {
gc();
}
for (int i = 0; i < mSize; i++)
if (mValues[i].equals(value))
return i;
return -1;
}