为何没有像Iterator.add()这样的方法,向集合中添加元素?
在 Java 中,Iterator
接口的设计初衷是为了提供一种遍历集合的方式,而不是修改集合的结构。Iterator
主要用于在遍历集合时访问元素,而不支持在遍历过程中添加或删除元素。这是为了避免在遍历过程中出现并发修改异常(ConcurrentModificationException),从而保证遍历的安全性和一致性。
如果你需要在遍历集合的同时添加元素,可以考虑以下几种方法:
使用 ListIterator
:ListIterator
是 Iterator
的一个子接口,提供了 add()
方法,可以在遍历 List
时添加元素。示例代码如下:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("B")) {
iterator.add("D"); // 在遍历时添加元素
}
}
使用 for-each
循环:在遍历集合时,可以先将要添加的元素存储在一个临时集合中,遍历完成后再将这些元素添加到原集合中。
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
List<String> toAdd = new ArrayList<>();
for (String element : list) {
if (element.equals("B")) {
toAdd.add("D"); // 收集要添加的元素
}
}
list.addAll(toAdd); // 遍历完成后添加元素
使用 Stream
API:在 Java 8 及以上版本中,可以使用 Stream
API 进行更复杂的操作,但这通常不涉及直接在遍历过程中修改集合。
总之,Iterator
的设计是为了提供安全的遍历,而不是修改集合。如果需要在遍历时添加元素,可以使用 ListIterator
或者其他方法来实现。