当java.util.Iterator.remove()方法是'可选操作'时,它是什么意思?

Vin*_*Jia 7 java iterator

我试图从Iterator对象中过滤特定元素,我可以通过iterator.remove()方法删除false元素.

这是我的方法存根:

    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;
    }
Run Code Online (Sandbox Code Playgroud)

我可以删除不相关的元素,但是当我查看Iterator.reomve()的java api时,它会说:

void remove():从底层集合中移除迭代器返回的最后一个元素(可选操作).每次调用next时,只能调用一次此方法.如果在迭代正在进行中以除调用此方法之外的任何方式修改基础集合,则未指定迭代器的行为.

我只是想知道为什么它是一个可选的操作?在使用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;
            }
        }
    }   

}
Run Code Online (Sandbox Code Playgroud)

zie*_*mer 15

这意味着根据API的合同,remove()不需要在所有实现上实现/提供该方法.这是因为在某些实现中,它可能没有意义 - 或者实现起来是不可行的.一个很好的例子是在只读集合上返回的迭代器 - 例如返回的迭代器Collections.unmodifiableCollection().