Good question, I look into [`duplicate`](https://github.com/scala/scala/blob/master/src/library/scala/collection/Iterator.scala#L1060) method just now. It uses a `scala.collection.mutuable.Queue` to mimic an `iterator`, and the elements iterated by one iterator but not yet by the other is stored there. I am shocked by that...

I have no idea of the memory cost by the `Queue`, but it seems the only way to duplicate an `iterator`. We have already tested before that the method is really fast than `iterator.toArray`. @liancheng Do you know about that?