创建一个自定义的lastIndexOf方法

时间:2017-06-27 12:41:52

标签: java

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是错误的。

有人能指出我正确的方向,我做错了吗?

2 个答案:

答案 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)算法,但这应该让你开始。