获取Java中Iterable的大小

发布于 2021-01-30 16:36:30

我需要弄清楚IterableJava 中元素的数量。我知道我可以这样做:

Iterable values = ...
it = values.iterator();
while (it.hasNext()) {
  it.next();
  sum++;
}

我也可以这样做,因为我不再需要Iterable中的对象:

it = values.iterator();
while (it.hasNext()) {
  it.remove();
  sum++;
}

小型基准测试没有表现出太大的性能差异,对此问题是否有任何评论或其他想法?

关注者
0
被浏览
57
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    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)番石榴为你做。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看