что это значит, когда java.util Метод .Iterator.remove () является «необязательной операцией»?

Я пытался отфильтровать определенные элементы из объекта Iterator, и я могу удалить ложные элементы с помощью метода iterator.remove () .

Вот моя заглушка метода:

    private static Iterator<A> process(Iterator<A> iter, Per p) {
        while(iter.hasNext()){
          A o = iter.next();
          if(p.per(o)){
             iter.remove();
          }
        }
        return iter;
    }

Я могу удалить несвязанные элементы, но когда я смотрю в java api для Iterator.reomve (), он говорит:

void remove (): Удаляет из базовой коллекции последний элемент, возвращенный итератором ( необязательная операция ). Этот метод может быть вызван только один раз за вызов следующего. Поведение итератора не определено, если базовая коллекция изменяется во время выполнения итерации любым другим способом, кроме вызова этого метода.

Я просто не понимаю, почему это необязательная операция? Это предупреждение, чтобы программист был более осторожен при использовании метода remove ()? или оно имеет другое значение?

Заранее спасибо за помощь.

И весь код, который я скомпилировал, приведен ниже для вашей справки:

package com.test.iterator;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorTest {

    public static void main(String[] args) {
        final IteratorTest it = new IteratorTest();

        List<A> list = new ArrayList<A>(){{
            add(it.new A(10));
            add(it.new A(11));
            add(it.new A(12));
            add(it.new A(13));
            add(it.new A(16));
        }};

        Iterator<A> iter = list.iterator();
        iter = process(iter, it.new Per());
        System.out.println("");
    }

    private static Iterator<A> process(Iterator<A> iter, Per p) {
        while(iter.hasNext()){
            A o = iter.next();
            if(p.per(o)){
                iter.remove();
            }
        }
        return iter;
    }

    class A{
        private String name;
        private int age;
        public A(int i){
            this.age = i;
            this.name = i + ",wang";
        }
    }
    class Per{
        public boolean per(A a){
            if(a.age % 2 == 0){
                return true;
            }else{
                return false;
            }
        }
    }   

}
7
задан Bhesh Gurung 7 December 2011 в 03:29
поделиться