所以我正在编写一些非常简单的代码,并发现了一个非常意外的行为。所有实现List都Map使用equals节点的方法来比较它们。因此,如果您有一个字符串列表,并且您想尝试获取列表中字符串的索引,则不需要使用相同的对象。例子:
List<String> list = new ArrayList<>();
list.add("test");
int index = list.indexOf("test");
System.out.println(index);//returns 0
我注意到 Android 的所有 SparseArray 类都使用==而不是equals比较节点。示例方法(LongSparseArray.java):
public int indexOfValue(E value) {
if (mGarbage) {
gc();
}
for (int i = 0; i < mSize; i++) {
if (mValues[i] == value) {
return i;
}
}
return -1;
}
因此,如果您有这样的简单代码:
LongSparseArray<String> localContacts = new LongSparseArray<>();
localContacts.put(2, "test");
int index = localContacts.indexOfValue("test");
System.out.println(index);
这里的索引将返回 -1(如果您不知道如何比较该值,这是非常意外的)。
所以我想知道...为什么Android不使用equals?这是更方便和更受欢迎的方式(从 Java 的角度来看)。现在我必须循环遍历 a 的所有值SparseArray并自己比较它们,这会导致更多(不需要的)代码(或者使用 a 会Map导致 Android 性能降低)。
慕勒3428872
相关分类