【问题标题】:Is there a writable iterator in Java?Java中有可写的迭代器吗?
【发布时间】:2011-02-17 15:45:20
【问题描述】:

在 C+ 中,可以使用迭代器来写入序列。最简单的例子是:

vector<int> v;
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) {
    *it = 42;
}

我需要一些更复杂的东西——将迭代器保留为类成员以备后用。 但我不知道如何从 Java 迭代器中获得这种行为。

Java 中有可写的迭代器吗?
如果不是,那么用什么代替它们?

【问题讨论】:

    标签: java arrays iterator mutable


    【解决方案1】:

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

    另外,你可以让你的内容可变。整数看起来很傻,但继续你的例子

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

    【讨论】:

      【解决方案2】:

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

      PS:您可以使用 ArrayList,它是一组自动增长的数组,并使用如 Balus 所述的 ListIterator,以便使用迭代器对象方法。

      【讨论】:

      • 设置一个值 int 是不够的。我需要int和array。
      【解决方案3】:

      ListIterator(可以通过List#listIterator()获取)有add()set()方法,可以分别插入和替换当前迭代索引处的项目。这是我能想到的 Java 中唯一的“可写迭代器”。

      不确定这是否是给定 C++ 代码的确切替代品,因为我不懂 C++。

      【讨论】:

      • 谢谢。数组有类似的东西吗?
      • @Lukasz:您可以使用 Arrays.asList 将数组转换为 List(在恒定时间内),然后从中获取 ListIterator。
      • 不,您应该更喜欢 List 而不是数组。 List 是数组的 Java 抽象,您可以使用 ArrayList 来拥有一个动态可扩展的数组。要了解有关List(Java Collections API 的一部分)的更多信息,请查看the Sun tutorial on the subject
      • ArrayList 是一个可动态扩展的数组。 List 可以是任何东西(即任何与接口相关的东西)。
      猜你喜欢
      • 2018-02-16
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      相关资源
      最近更新 更多