6

我有两个不同的函数来尝试在 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 );
4

2 回答 2

9

使用已有的 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);
  }
}

文档

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

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

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

于 2014-12-16T14:03:36.277 回答
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);
}
于 2012-10-08T19:34:15.917 回答