找到存储在arraylist中的对象的平均值的最佳方法是什么?

时间:2016-05-15 06:46:40

标签: java arraylist average

我有一个方法可以返回一个对象的计数,这些对象的值高于ArrayList中所有对象的平均值。

'用户' object具有存储在其类(级别)中的整数值。

我的方法有效,但我想知道是否有更好的方法来查找所有对象值的平均值?

public int bestPlayers() {

    ArrayList<User> players = new ArrayList<User>();
    int bestPlayers = 0;
    int totalPlayerLevel = 0;
    double averageLevel = 0;

    for (int i = 0; i < players.size(); i++) {
        totalPlayerLevel += players.get(i).level;
    }

    averageLevel = totalPlayerLevel / players.size();

    for (int i = 0; i < players.size(); i++) {
        if (players.get(i).level > averageLevel) {
            bestPlayers++;
        }
    }

    return bestPlayers;
}

2 个答案:

答案 0 :(得分:6)

Java 8使用IntStream#average()提供了一种更好的方法:

O(nlogn)

然后输出“高于平均水平”玩家的数量:

O(logn)

答案 1 :(得分:2)

您的代码可以在t.py中使用,因为您通过数组两次。好吧,因为你必须计算平均值,这意味着你必须至少旅行一次,所以没有比t.py更快的性能选择。

你要做的第二件事,你必须计算出比平均水平高的玩家。这里只有加速可能是你已经排序了数组(之前有,而不是现在计算,因为它的O(n),然后你可以找到第一个更高级别然后平均值并计算剩余数量。这将花费{{1但是,由于你计算了平均值,它的性能仍然是O(n)