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

新手上路,请多包涵

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

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

…似乎浪费了 CPU 周期。

原文由 Zak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

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

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

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

原文由 Michael Berry 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 番石榴库

 int size = Iterators.size(iterator);

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

原文由 Andrejs 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题