是否有一种“计算上”的快速方法来获取迭代器的计数?
int i = 0;
for ( ; some_iterator.hasNext() ; ++i ) some_iterator.next();
…似乎浪费了 CPU 周期。
原文由 Zak 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否有一种“计算上”的快速方法来获取迭代器的计数?
int i = 0;
for ( ; some_iterator.hasNext() ; ++i ) some_iterator.next();
…似乎浪费了 CPU 周期。
原文由 Zak 发布,翻译遵循 CC BY-SA 4.0 许可协议
8 回答6.5k 阅读
3 回答2.4k 阅读✓ 已解决
2 回答3.3k 阅读
3 回答1.8k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
2 回答1.9k 阅读
1 回答892 阅读✓ 已解决
如果你刚刚得到了迭代器,那么这就是你必须做的——它不 知道 还有多少项需要迭代,所以你不能查询它的结果。有一些实用方法 似乎 可以有效地做到这一点(例如
Iterators.size()
在 Guava 中),但在下面它们只是消耗迭代器并在运行时进行计数,与您的示例相同。但是,许多迭代器来自集合,您通常可以查询它们的大小。如果它是一个用户制作的类,您正在获取迭代器,您可以考虑在该类上提供一个 size() 方法。
简而言之,在您 只有 迭代器的情况下,没有更好的方法,但通常您可以访问底层集合或对象,您可以直接从中获取大小。