Java中是否有可写的迭代器?

6
在 C++ 中,可以使用迭代器来写入序列。最简单的例子如下:
vector<int> v;
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) {
    *it = 42;
}

我需要更复杂的东西 - 将迭代器作为类成员以供稍后使用。 但我不知道如何从Java迭代器中获得此行为。

Java中是否有可写迭代器?
如果没有,那么是什么替代它们呢?

3个回答

10

ListIterator(您可以通过 List#listIterator() 获得)具有add()set()方法,分别允许您在当前迭代索引处插入和替换项目。这是我所知道的Java中唯一的“可写迭代器”。

不确定是否与给定的C++代码完全相同,因为我不懂C++。


谢谢。有没有类似的东西适用于数组? - Łukasz Lew
3
你可以使用 Arrays.asList 将数组转换为列表(在常数时间内),然后从中获取一个 ListIterator。 - sepp2k
1
不,你应该优先选择 List 而不是数组。List 是 Java 数组的抽象,你可以使用 ArrayList 来拥有一个动态可扩展的数组。如果想要了解更多关于 List 的信息(它是 Java 集合框架的一部分),请查看 Sun 关于此主题的教程 - BalusC
一个ArrayList是一个动态可扩展的数组。而List可以是任何东西(只要它遵循了接口)。 - sepp2k

2

由于数组可以通过索引直接和快速地访问,您实际上不需要一个迭代器对象。在该类成员中保存数组的索引不足以读取和写入数组的值吗?

PS:您可以使用ArrayList,它是自动增长的数组集合,并使用Balus描述的ListIterator来使用迭代器对象方法。


仅设置一个int值是不够的。我需要包括int和数组两者的值。 - Łukasz Lew

0

看起来更像是你想要一个 List(或者可能是其他集合,比如 Set)或一个数组。

此外,你可以将你的内容变为可变。这对于整数来说看起来很傻,但是继续你的例子。

for (MutableInteger i : CollectionOfMInts) i.setTo(42);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接