Java 检查两个列表是否相等会引发IndexOutOfBoundsException
在我的Android应用程序中,我想检查两个不同列表中是否有相同的元素。但总有一个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
索引自动边界异常
,我不知道出了什么问题。你能帮我吗
下面是函数:
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
}