Android JSONArray相当于indexOf?

时间:2014-08-13 21:27:14

标签: java android json

我有一个名为JSONArray的{​​{1}} JSONObject,在我的代码中的某个时刻,我检索了其中一个对象。例如:

myArray

稍后,我想在JSONObject myObject = myArray.getJSONObject(x); 内查找myObject的索引。也就是说,我想让x回来。

Java / Android中是否有“indexOf”方法?

myArray

如果没有,我可以遍历y = myArray.indexOf(myObject); // y should equal x 并直接将myArraymyObject进行比较,而无需比较myArray.getJSONObject(i)的每个元素。换句话说,JSONObject中的元素是myObject的副本还是对<?}的元素的引用?

感谢。

2 个答案:

答案 0 :(得分:0)

没有没有indexOf方法,你应该循环遍历它,直到你得到一个匹配。

实际上...... java自己的ArrayList完全相同

public int indexOf(Object o) {
    if (o == null) {
        for (int i = 0; i < size; i++) {
            if (elementData[i] == null) {
                return i;
            }
        }
    } else {
        for (int i = 0; i < size; i++) {
            if (o.equals(elementData[i])) {
                return i;
            }
        }
    }
    return -1;
}

答案 1 :(得分:0)

我做了一点测试,看看JSONObject和JSONArray对象究竟发生了什么。也许它在文档中很清楚,但我没有看到它。

&#34; get&#34; JSONObject和JSONArray的方法返回引用,而不是副本。例如,我有一个JSONArray myArray的JSONObjects,我得到一个对象:

myObject = myArray.getJSONObject(x);

由于myObject是myArray中元素的引用,如果我修改myObject,它也会在myArray中被修改。

此外,我可以遍历数组并直接比较对象,而不必比较对象中的每个元素:

for (int i = 0; i < myArray.length(); i++)
    if (myarray.getJSONObject(i) == myObject)
        System.out.println(i + " is equal"); // will be true when i == x
    else
        System.out.println(i + " is not equal");

希望这有助于其他人。