ピットレコードを踏む--list.remove()メソッドトラップ

まず、正しい方法について最初に話します

1.インデックスを同期的に調整します

        for (int i = 0; i < list.size(); i++) {
            Apple apple = list.get(i);
            if(apple.getWeight()==23){
                list.remove(i--);
            }
        }

2.リストを逆の順序でトラバースして、要素を削除します

        for (int i = list.size() - 1; i >= 0; i--) {
            Apple apple = list.get(i);
            if (apple.getWeight() == 23) {
                list.remove(i);
            }
        }

3. Iterator.remove()メソッドは、元の要素のインデックスを保持したまま、現在の反復オブジェクトを削除します。このメソッドをお勧めします。

        Iterator<Apple> iterator = list.iterator();
        while (iterator.hasNext()) {
            Apple apple = iterator.next();
            if (apple.getWeight() == 23) {
                iterator.remove();
            }
        }

第二に、削除する間違った方法

1.正の順序の走査

        for (int i = 0; i < list.size(); i++) {
            Apple apple = list.get(i);
            if(apple.getWeight()==23){
                list.remove(i);
            }
        }

2.繰り返しトラバースし、list.remove(i)メソッドを使用して要素を削除し、例外をスローします:java.util.ConcurrentModificationException

        Iterator<Apple> iterator = list.iterator();
        while (iterator.hasNext()) {
            Apple apple = iterator.next();
            if (apple.getWeight() == 23) {
                list.remove(apple);
            }
        }

3. Forechが削除され、例外がスローされます:java.util.ConcurrentModificationException

        for (Apple apple : list) {
            if (apple.getWeight() == 23) {
                list.remove(apple);
            }
        }

 

おすすめ

転載: blog.csdn.net/qq_36336332/article/details/107191910