2

次のコードがあります。

System.out.println(dislist.size());

for (int k = 0; k < 10; k++) {
    System.out.println(k + dislist.get(k).first + dislist.get(k).second);

    if (!dislist.get(k).first.equals(Nodename)) {
        if (dislist.get(k).first.equals(myfirst) ||
            dislist.get(k).first.equals(mysecond) ||
            dislist.get(k).second.equals(myfirst) ||
            dislist.get(k).second.equals(mysecond)) {
                dislist.remove(k);                    
            }
        }
    }
}

問題は次のとおりです。最初の印刷では、それが 10 であることが明確に示されていdislist.size()ます。ただし、リストのサイズが 6 以下であることを示す、範囲外の例外が配列に表示されます。そして、はい、新しいオブジェクトをその前に数行リストします。まだ終わっていないループが始まるのはいつだと思います。リストに実際に10個のオブジェクトがある場合にのみ、Java(同じメソッド内)に強制的にループを開始させる方法はありますか?

4

2 に答える 2

5

繰り返しながら、リストから要素を削除します。それがサイズが変化している理由です。

dislist.remove(k);

新しいリストを作成し、削除する各要素をリストに追加します。ループが終了したら、を使用disList.removeAll(listOfElementsToRemove)して一度にすべてを削除します。

于 2013-01-06T14:32:25.087 に答える
4
Iterator<YourClass> iter = dislist.iterator();
while (iter.hasNext()) {
     YourClass obj = iter.next();
     if (/* your expression */) {
          iter.remove();
     }
}
于 2013-01-06T14:40:53.667 に答える