gpt4 book ai didi

java - 在 Java 中获取 Iterable 的大小

转载 作者:IT老高 更新时间:2023-10-28 11:51:50 35 4
gpt4 key购买 nike

我需要计算出 Java 中 Iterable 中元素的数量。我知道我可以做到:

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 中删除所有元素,因此之后它是空的。像大小这样的简单查询更改数据结构是非常出乎意料的。

对于性能,这取决于您的数据结构。例如,如果它实际上是一个 ArrayList,则从头开始删除元素(您的第二种方法正在执行的操作)非常慢(计算大小变为 O(n*n) 而不是 O(n)应该是这样)。

一般来说,如果 values 有可能实际上是一个 Collection 而不仅仅是一个 Iterable,请检查这一点并调用 size() 以防万一:

if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
// use Iterator here...

size() 的调用通常比计算元素的数量要快得多,而这个技巧正是 Iterables.size(Iterable)Guava为你做。

关于java - 在 Java 中获取 Iterable 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11598977/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com