我需要弄清楚Iterable
Java 中元素的数量。我知道我可以这样做:
Iterable values = ...
it = values.iterator();
while (it.hasNext()) {
it.next();
sum++;
}
我也可以这样做,因为我不再需要Iterable中的对象:
it = values.iterator();
while (it.hasNext()) {
it.remove();
sum++;
}
小型基准测试没有表现出太大的性能差异,对此问题是否有任何评论或其他想法?
TL; DR:使用Iterables.size(Iterable)
强大的Guava库的实用程序方法。
在您的两个代码段中,应该使用第一个,因为第二个将删除中的所有元素values
,因此之后为空。为简单的查询(例如大小)更改数据结构是非常意外的。
为了提高性能,这取决于您的数据结构。例如,如果实际上是an ArrayList
,则从头开始删除元素(第二种方法正在做的事情)非常慢(计算大小变为O(n * n)而不是应有的O(n))。
通常,如果有可能values
是a Collection
而不是a Iterable
,请检查并size()
在以下情况下致电:
if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
// use Iterator here...
要将呼叫size()
通常比计算元素的数量快得多,而且这一招正是Iterables.size(Iterable)
的番石榴为你做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句