获取迭代器的计数/长度/大小的最佳方法是什么?

2022-08-31 09:21:05

有没有一种“计算”快速方法来获取迭代器的计数?

int i = 0;
for ( ; some_iterator.hasNext() ; ++i ) some_iterator.next();

...似乎是浪费CPU周期。


答案 1

使用番石榴库

int size = Iterators.size(iterator);

在内部,它只是迭代所有元素,所以它只是为了方便。


答案 2

如果你刚刚有了迭代器,那么这就是你必须做的 - 它不知道它有多少项目需要迭代,所以你不能查询它以获得该结果。有些实用方法似乎可以有效地做到这一点(例如在番石榴中),但在下面,它们只是消耗迭代器并随着它们的进行计数,与你的例子相同。Iterators.size()

但是,许多迭代器来自集合,您通常可以查询其大小。如果它是一个用户创建的类,你将获得迭代器,你可以考虑在该类上提供一个size()方法。

简而言之,在您只有迭代器的情况下,没有更好的方法,但通常您可以访问基础集合或对象,您可以从中直接获取大小。