1

コード:

List<InData> inDataList= generateInRepo.getInList();
for(int i=0; i<inDataList.size();i++){
    if(somecondition){
        inDataList.remove(i);
    }
}

ここでの問題は、アイテムが削除されると、リストのサイズが乱れ、コードが失敗することです。この機能を正しい方法で実現するにはどうすればよいですか?

4

5 に答える 5

4

iコードの問題は、削除後にインクリメントしないことです。

反復するリストから削除する秘訣は、逆方向に反復することです。

for( int i=inDataList.size()-1; i <= 0 ; i--) {
    if(somecondition){
        inDataList.remove(i);
    }
}

このようにして、次の反復が、既にアクセスしたインデックスに到達することはありません。

于 2013-06-15T11:19:06.873 に答える
1

使用するIterator

List<InData> inDataList = generateInRepo.getInList();
for (Iterator<InData> iterator = inDataList.iterator(); iterator
        .hasNext();) {
    InData inData = (InData) iterator.next();
    if (somecondition) {
        iterator.remove();
    }
}
于 2013-06-15T11:19:43.263 に答える
0

を使用Iteratorして、リストから要素を削除してみてください。

for(Iterator<InData> itr = inDataList.iterator();itr.hasNext();itr.next();) {
    if(somecondition) {
        itr.remove();
    }
}
于 2013-06-15T11:19:23.883 に答える