先上错误代码:
for(int i=0;i<listCTable.size();i++){
Map mapc=listCTable.get(i);
if(mapc.get("accountid").equals(pid)){
listB.add(mapc.get("lookupid").toString());
}else{
listCTable.remove(i);
}
}
程序执行异常,返回数据数量异常。
原因remove操作使List内的元素位置发生了变化,而 位置 i 却正常进行累加,就造成 remove掉不该remove的元素。
解决的方法有两种:
1.倒叙遍历
for (int i = list.size() - 1; i >= 0; i--) {
String str = list.get(i);
if (str .equals("accountid")) {
list.remove(str);
}
}
后续元素的删除不影响未遍历的前面的元素的下标,所以这种方法可行。
2.使用迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String str = it.next();
if (str.equals("accountid")) {
it.remove();
}
}
本文探讨了在Java中遍历List并删除元素时常见的错误,详细解释了错误发生的原因,并提供了两种有效的解决方案:倒叙遍历和使用迭代器。通过这两种方法,可以避免在遍历过程中因删除元素导致的下标错位问题。
4万+

被折叠的 条评论
为什么被折叠?



