我有两个不同的函数来尝试查找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 );
答案 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);
}
}
您还可以将其视为稍差的解决方案
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);
}