我有多个列表,并且对于一个特定列表(在示例列表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的迭代器?
答案 0 :(得分:0)
只需返回包装原始列表的不可修改列表的迭代器即可:
return Collections.unmodifiableList(b).iterator();
答案 1 :(得分:0)
return Collections.unmodifiableList(b).iterator();
在我看来,这是简单的出路。列表上的不可修改视图可确保您获得的迭代器无法修改列表,即remove
方法将不起作用,并且应引发异常,UnsupportedOperationException
。
编辑:由于您无法更改myMethod
,因此有两种选择,或者实际上是两种选择:
b
完全不可修改。当然,只有在完全不需要修改b
的情况下,这才可以接受。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