我有一个名为JSONArray
的{{1}} JSONObject
,在我的代码中的某个时刻,我检索了其中一个对象。例如:
myArray
稍后,我想在JSONObject myObject = myArray.getJSONObject(x);
内查找myObject
的索引。也就是说,我想让x回来。
Java / Android中是否有“indexOf”方法?
myArray
如果没有,我可以遍历y = myArray.indexOf(myObject); // y should equal x
并直接将myArray
与myObject
进行比较,而无需比较myArray.getJSONObject(i)
的每个元素。换句话说,JSONObject
中的元素是myObject
的副本还是对<?}的元素的引用?
感谢。
答案 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");
希望这有助于其他人。