复制迭代器

时间:2014-04-19 09:48:56

标签: java reference iterator

在java中,如何复制迭代器?这里因为i和j是参考变量,所以一个变化反映在另一个变量中。如何在下面的代码中获得1 1的预期输出。而不是1 2。

        List<Integer> l = new ArrayList<Integer>();
        l.add(1);
        l.add(2);
        l.add(3);
        l.add(4);

        Iterator i = l.iterator();
        Iterator j = i;

        System.out.println(i.next() + "\n");
        System.out.println(j.next()); 
        System.out.println("This prints 1 2, But I want 1 1, to be printed");

编辑:

我能做到,

Iterator i = l.iterator(); Iterator j = l.iterator();  但是获得这个迭代器并不像在这个例子中那么简单,它的成本很高。所以我不会在原始代码中这样做。实际上我将得到的是DB Rows的迭代器,它包含许多复杂的标准。

2 个答案:

答案 0 :(得分:3)

Iterator j = l.iterator();

而不是

Iterator j = i;

我们只能在一个方向上迭代。因此,如果没有获得新的迭代器,您就无法进入收集的开始。此外,获取迭代器并不意味着您加载整个集合。把它想象成光标。

答案 1 :(得分:0)

没有通用的方法来复制迭代器。

原因是该接口还意味着支持不可能或难以实现状态的简单副本的实现。例如,想象一下输入流周围的包装器,它迭代输入流输出的行。如果你想复制迭代器,那么你要么必须复制输入流(例如,如果它是一个套接字则很难或不可能)或者缓存迭代器的另一个实例已经返回的所有行。

如果幸运的话,库调用返回的迭代器实现实际上支持复制操作,但这必须以非标准方式完成。