没有删除方法的返回迭代器

时间:2018-11-18 17:28:07

标签: java iterator override

我有多个列表,并且对于一个特定列表(在示例列表b中),我必须返回一个没有/不允许删除方法的迭代器,我必须保留以下信息:

 public static void main(String[] args){
    List<E> a = new ArrayList<E>;
    List<E> b = new ArrayList<E>;

    b.add("A");
    b.add("B");
    b.add("C");
    myMethod();
    }

    public Iterator<E> myMethod(){
      return b.iterator();
    }

我无法更改“公共迭代器myMethod()”,如果没有Remove方法,怎么可能返回b的迭代器?

2 个答案:

答案 0 :(得分:0)

只需返回包装原始列表的不可修改列表的迭代器即可:

return Collections.unmodifiableList(b).iterator();

答案 1 :(得分:0)

    return Collections.unmodifiableList(b).iterator();

在我看来,这是简单的出路。列表上的不可修改视图可确保您获得的迭代器无法修改列表,即remove方法将不起作用,并且应引发异常,UnsupportedOperationException

编辑:由于您无法更改myMethod,因此有两种选择,或者实际上是两种选择:

  1. 使b完全不可修改。当然,只有在完全不需要修改b的情况下,这才可以接受。
  2. b设为无法修改的视图,可以通过同一列表的其他视图进行修改。

Java 8和更早版本中1.的代码示例:

    List<String> b = Collections.unmodifiableList(Arrays.asList("A", "B", "C"));

在Java 9和更高版本中,它更简单:

    List<String> b = List.of("A", "B", "C");

List.of产生一个不可修改的列表。

如果完全无法修改的列表不符合您的要求,请在此处为选项2的代码提出建议:

    List<String> modifiableB = new ArrayList(Arrays.asList("A", "B", "C"));
    List<String> b = Collections.unmodifiableList(modifiableB);

现在myMethod将访问b,即不可修改的视图,因此将产生一个不能删除元素的迭代器,而其他方法可以通过b来修改modifiableB