int found = 0;
int index = 0;
while (index < list.size()) {
if(list.get(index) == z) {
found = index;
}
index++;
}
return found;
z只是对象的名称 我试图弄清楚为什么在没有使用已经构建到java中的lastIndexOf方法的情况下在arraylist中找到lastIndexOf是错误的。
有人能指出我正确的方向,我做错了吗?
答案 0 :(得分:2)
首先,您要使用equals
,而不是将引用与==
进行比较。
其次,您希望found
的初始值为-1
,以防您在列表中找不到该元素(否则您将返回{ {1}},这是一个有效的索引,当找不到元素时。)
0
当然,从列表末尾向后迭代会更有效率。
int found=-1;
int index=0;
while (index<list.size()){
if(list.get(index).equals(z)){
found=index;
}
index++;
}
return found;
答案 1 :(得分:2)
三个问题:
1)如果找不到元素,你应该返回一个不是容器有效索引的索引。让我们使用-1,尽管Java bods可能比这更好,例如返回与元素 的位置相关的负值(如果它在容器中)。
2)你需要从列表的末尾开始并向后工作。否则你不一定会找到最后一个。
3)不要使用==
来比较值。请改用equals
。
将这些内容放在一起,删除了一个冗余变量后,就会给你
int index;
for (index = list == null ? -1 : list.size() - 1; index >= 0; --index){
if (list.get(index).equals(z)){
break;
}
}
return index;
可能有更好的遍历容器的方法:我无意中为随机查找为O(N)的容器构建了一个O(N * N)算法,但这应该让你开始。