代码:
List<InData> inDataList= generateInRepo.getInList();
for(int i=0; i<inDataList.size();i++){
if(somecondition){
inDataList.remove(i);
}
}
这里的问题是当一个项目被删除时,列表的大小会受到干扰并且代码会失败。如何以正确的方式实现此功能?
代码:
List<InData> inDataList= generateInRepo.getInList();
for(int i=0; i<inDataList.size();i++){
if(somecondition){
inDataList.remove(i);
}
}
这里的问题是当一个项目被删除时,列表的大小会受到干扰并且代码会失败。如何以正确的方式实现此功能?
您的代码的问题是您不应该i
在删除后增加。
从您迭代的列表中删除的技巧是向后迭代它:
for( int i=inDataList.size()-1; i <= 0 ; i--) {
if(somecondition){
inDataList.remove(i);
}
}
这样,您的下一次迭代将永远不会到达您已经访问过的索引。
Iterator.remove()
在迭代期间是安全的:
List<InData> inDataList = generateInRepo.getInList();
Iterator<InData> it = inDataList.iterator();
while (it.hasNext()) {
InData data = it.next();
if (some condition) {
it.remove();
}
}
利用Iterator
List<InData> inDataList = generateInRepo.getInList();
for (Iterator<InData> iterator = inDataList.iterator(); iterator
.hasNext();) {
InData inData = (InData) iterator.next();
if (somecondition) {
iterator.remove();
}
}
将“好”记录复制到另一个数组,然后替换原始记录。
使用Iterator
并尝试从列表中删除元素。
for(Iterator<InData> itr = inDataList.iterator();itr.hasNext();itr.next();) {
if(somecondition) {
itr.remove();
}
}