先上错误代码:
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();
}
}