我从一个类中获取一个Iterator,我想获得该迭代器的第x个元素。我知道我可以将它加载到循环中的ArrayList中或检查计数器,但这似乎效率低下/丑陋。这样做的最佳方式是什么?
我想的是,
List al = new ArrayList(myIterator);
myval = al.get(6);
但是那个构造函数是未定义的。感谢。
答案 0 :(得分:9)
Iterator
的定义不允许任意索引到某个位置。这就是它的定义方式。如果您需要该功能,则必须将数据加载到可索引的集合中。
Iterator
界面的要点是允许顺序访问集合,而不知道其大小。迭代器可以是仅向前的或双向的(ListIterator
)。它只是访问集合元素的一个特定模型。一个优点是它对集合大小没有任何意义,这可能太大而不能完全适合内存。通过仅允许顺序访问,实现可以在任何给定时刻自由地将部分集合保留在内存中。
如果需要将迭代器内容加载到列表中,则需要使用循环自行完成。
答案 1 :(得分:6)
不,你已经找到了唯一的方法。您最终需要for
循环来迭代到适当的位置。
一些实用程序库具有load an Iterator
's contents into an ArrayList
或get the n
th element of an Iterator
的快捷方式,但JDK中没有内置任何内容。