gpt4 book ai didi

java - 返回没有Remove方法的迭代器

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:52 26 4
gpt4 key购买 nike

我有多个列表,对于特定列表(在示例列表 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();
}

我无法更改“public Iterator myMethod()”,如何在没有Remove方法的情况下返回b的迭代器?

最佳答案

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

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

编辑:由于您无法更改myMethod,因此有两个选项,或者实际上是变体:

  1. 使 b 完全不可修改。当然,只有当您根本不需要修改 b 时,这才是可以接受的。
  2. b 设为列表上不可修改的 View ,可以通过同一列表的其他 View 进行修改。

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,即不可修改的 View ,因此生成一个无法删除元素的迭代器,而其他方法可以通过 modifyingB 修改 b

关于java - 返回没有Remove方法的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53363626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com