2

是否有内置方法来计算整数 ArrayList 的平均值?

如果没有,我可以通过获取 ArrayList 的名称并返回其平均值来创建一个函数吗?

4

5 回答 5

9

这真的很简单:

// Better use a `List`. It is more generic and it also receives an `ArrayList`.
public static double average(List<Integer> list) {
    // 'average' is undefined if there are no elements in the list.
    if (list == null || list.isEmpty())
        return 0.0;
    // Calculate the summation of the elements in the list
    long sum = 0;
    int n = list.size();
    // Iterating manually is faster than using an enhanced for loop.
    for (int i = 0; i < n; i++)
        sum += list.get(i);
    // We don't want to perform an integer division, so the cast is mandatory.
    return ((double) sum) / n;
}

为了获得更好的性能,请使用int[]而不是ArrayList<Integer>.

于 2012-05-05T21:09:58.147 回答
2

如果你想比平均水平多一台计算机,我建议在 CERN 开发的Colt库支持许多统计功能。请参阅BinFunctions1DDoubleMatrix1D。另一种选择(具有最近的代码基础)可能是commons-math

DescriptiveStatistics stats = new DescriptiveStatistics();
for( int i = 0; i < inputArray.length; i++)
{
    stats.addValue(inputArray[i]);
}
double mean = stats.getMean();
于 2012-05-05T21:15:15.333 回答
2

即将推出,在JDK 8中使用 lambda 表达式和方法引用:

DoubleOperator summation = (a, b) -> a + b;
double average = data.mapReduce(Double::valueOf, 0.0,  summation) / data.size();
System.out.println("Avergage : " + average);
于 2012-05-05T22:05:03.687 回答
1

不,没有。您可以简单地遍历完整列表以添加所有数字,然后简单地将总和除以数组列表的长度。

于 2012-05-05T21:09:30.377 回答
0

您可以使用Apache Commons库中的“平均” 。

于 2012-05-05T21:15:57.253 回答