查找ArrayList中的最大值

时间:2012-10-08 19:27:18

标签: java collections arraylist

我有两个不同的函数来尝试查找ArrayList中的最大值。 我有两个,因为我第一次看到他们是否会返回相同的值,然后是性能时间。

然而,它们正在重现相同的值,但它似乎是ArrayList的最后一个值,无论它是否是最大值。我认为它可能是关键而不是价值。

代码如下,我认为这只是一个简单的错误,但任何人都可以指出我正确的方向吗?

double highest = fitnessArray.get(0);

for (int s = 0; s <fitnessArray.size(); s++){
    if (fitnessArray.get(s)>highest)
        highest=fitnessArray.get(s);

}

System.out.println("highest fitness = " + highest 
                + " indoexOf = " + fitnessArray.indexOf(highest));

double highestFitness;

highestFitness = Collections.max(fitnessArray);
System.out.println("lowest fitness 2 = " + highestFitness );

2 个答案:

答案 0 :(得分:6)

使用已有的api

Collections.max(arrayList);

实施例

import java.util.ArrayList;
import java.util.Collections;

public class Main {

  public static void main(String[] args) {

    ArrayList<Integer> arrayList = new ArrayList<Integer>();

    arrayList.add(new Integer("3"));
    arrayList.add(new Integer("1"));
    arrayList.add(new Integer("8"));
    arrayList.add(new Integer("3"));
    arrayList.add(new Integer("5"));

    Object obj = Collections.max(arrayList);
    System.out.println(obj);
  }
}

Documentation

您还可以将其视为稍差的解决方案

Collections.sort(arrayList); // Sort the arraylist
arrayList.get(arrayList.size() - 1); //gets the last item, largest for an ascending sort

如果您以后需要排序列表,第二种方法可能会有用。

答案 1 :(得分:1)

如果您存储最大数字所在的索引,那么您可能会有更好的运气:

if (fitnessArray.size() > 0) {
    double highest = fitnessArray.get(0);
    int highestIndex = 0;

    for (int s = 1; s < fitnessArray.size(); s++){
        double curValue = fitnessArray.get(s);
        if (curValue > highest) {
            highest = curValue;
            highestIndex = s;
        }
    }

    System.out.println("highest fitness = " + highest + " indoexOf = " + highestIndex);
}