Android SparseArray中indexOfValue返回-1
Posted
继续Android。
SparseArray<T>
是蛮好用的基本类型,一般用来替换掉HashMap<Integer, T>
。
有时候偷懒,也会用它来替换Object[]
,也就是基本数组。
因为这货有indexOfValue
(这样就不用去遍历找索引啦),遍历也比HashMap方便的多。可以满足对基本数组的需要(但性能不高,使用需谨慎,文档有详细解释为什么)。
但是,这玩意儿有个坑,也就在indexOfValue
里面。
当用它来存储String
时,可能会出现明明Value
已经put
进去了,但是indexOfValue
就是返回-1
的情况。
一开始还以为可能是线程安全相关的问题,还打算加锁来着。结果。。。
原因在于:
Note also that unlike most collections' indexOf methods, this method compares values using == rather than equals.
源码如下:
public int indexOfValue(E value) {
if (mGarbage) {
gc();
}
for (int i = 0; i < mSize; i++)
if (mValues[i] == value)
return i;
return -1;
}
T_T
Java中,字符串比较用==
和equals
的区别就不用解释了吧。。。
你说Android你加个方便好用的数据结构你用个equals能咋样。。。又中枪了。。。