Java 检查两个列表是否相等会引发IndexOutOfBoundsException

Java 检查两个列表是否相等会引发IndexOutOfBoundsException,java,android,Java,Android,在我的Android应用程序中,我想检查两个不同列表中是否有相同的元素。但总有一个索引自动边界异常,我不知道出了什么问题。你能帮我吗 下面是函数: private void checkEquality(){ if(!langlist.isEmpty()) { for (int i = 0; i <= langlist.size(); i++) { if (!selectedlang.isEmpty()) { f

在我的Android应用程序中,我想检查两个不同列表中是否有相同的元素。但总有一个
索引自动边界异常
,我不知道出了什么问题。你能帮我吗

下面是函数:

private void checkEquality(){
    if(!langlist.isEmpty()) {
        for (int i = 0; i <= langlist.size(); i++) {
            if (!selectedlang.isEmpty()) {
                for (int j = 0; j <= selectedlang.size(); j++) {
                    if (langlist.get(i).getName().equals(selectedlang.get(j).getName())) {
                        System.out.println(i + " / " + langlist.size() + " removed");
                        langlist.remove(i);

                    }

                }
            }
        }
    }
}

索引从
0
一直到列表的大小,它应该是
size-1


为列表上的For循环替换,
i在此行之前
langlist.remove(i)
所以你的if条件是

if(..equals..){
    langlist.remove(i);
    checkEquality()
    return;
}
当您在
langlist
上调用
remove()
方法时,列表的大小会更新,但仍在增加
i
,这会导致此问题 尝试以相反的顺序迭代循环,以防止出现如下错误:

for (int i = langlist.size() - 1; i >= 0; i--){
// do checks and deletions here
}

如果您使用的是@malware所述的java8,您也可以使用
removeIf()
方法来删除常用项

i好的,谢谢,但它不起作用。它不起作用不是错误描述。是否存在其他异常或意外结果?内部循环中的j也是如此。您只是从两个列表中删除了公共元素。Java8的这种方法怎么样<代码>langlist.removeIf(selectedlang::contains)
if(..equals..){
    langlist.remove(i);
    checkEquality()
    return;
}
for (int i = langlist.size() - 1; i >= 0; i--){
// do checks and deletions here
}