1

indexOfValue(E)当我确定我的E对象存在于我的SparseArray对象中时,方法总是返回 -1,为什么?我有 :

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。

4

1 回答 1

2

因为它使用 == 而不是 equal 来确定相等性。查看方法的实现:

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;
}
于 2017-01-30T17:37:58.727 回答