Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding the largest value in an ArrayList

I have two different functions for trying to find the largest value in an ArrayList. I have two since i was first seeing if they would return the same value and then performance time.

However they are reproducing the same value but it seems to be the last value of the ArrayList, regardless if its the largest or not. I think it might be taking the key instead of the value.

The code is below, and I think its just a simple mistake but can anyone point me in the right direction?

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 );
like image 805
James King Avatar asked Oct 08 '12 19:10

James King


2 Answers

Use already existing api

Collections.max(arrayList);

Example

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

You can also consider as a slightly worse solution

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

Second approach might be useful if you'll need sorted list later.

like image 157
Marcin Szymczak Avatar answered Sep 25 '22 16:09

Marcin Szymczak


You might have better luck if you store the index that the largest number is at:

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);
}
like image 35
Nathan Villaescusa Avatar answered Sep 25 '22 16:09

Nathan Villaescusa