当前位置: 首页 > 面试题库 >

获取Java中Iterable的大小

艾哲
2023-03-14
问题内容

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

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



 类似资料:
  • 问题内容: 我使用以下代码实例化了一个对象: 如何获得此文件的大小? 是什么区别,和? 问题答案: 使用类中的方法。从javadocs: 返回此抽象路径名表示的文件的长度。如果此路径名表示目录,则未指定返回值。 对于问题的第二部分,直接来自的javadocs: 返回此抽象路径名所命名的分区上该虚拟机可用的字节数 返回此抽象路径名命名的分区的大小 返回此抽象路径名所命名的分区中未分配的字节数

  • 本文向大家介绍Java的System.getProperty()方法获取大全,包括了Java的System.getProperty()方法获取大全的使用技巧和注意事项,需要的朋友参考一下 本文实例汇总了Java的System.getProperty()方法获取信息的用法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Java程序设计有所帮助。

  • 我正在处理一个问题,该问题涉及我编写一个查询以从数据库中获取数千条记录。我将使用的查询将在WHERE条件中包含2个IN子句。 根据我的知识可能有限,请您纠正我,对于这个用例,我不能使用jdbctemplate。我必须转向NamedParameterJdbcTemplate,因为NamedParameterJdbcTemplate为我们提供了使用IN子句的灵活性。 现在我想回答的问题如下。 Q Q

  • 是否有一个隐藏在Internet中的ByteBuffers方面的gzip放气库?允许我们推送原始数据然后提取放气数据的东西?我们已经搜索过了,但只找到了处理InputStreams和OutputStreams的库。 我们的任务是创建gzip过滤器,用于在管道架构中减少字节缓冲流。这是一个pull架构,其中最后一个元素从早期元素中提取数据。我们的gzip过滤器处理字节缓冲流,没有单个流对象可用。 我

  • 在JFrame上调整大小后,是否有任何方法返回新旧大小之间的差异,即(dx,dy)? 如果没有,有没有办法获得这些信息? (dx,dy)-图像

  • 我想获取文件夹大小并重命名它,如果我的文件夹大小超过500 mbs然后重命名文件夹,下载到MusicDownload