110 votos

cómo obtener el máximo valor de la Lista/ArrayList

Hay un ArrayList que almacena valores enteros. Necesito encontrar el valor máximo de esta lista. Por ejemplo, supongamos que los valores almacenados en el arrayList son : 10, 20, 30, 40, 50 y el valor máximo sería 50 .

¿Cuál es la forma eficiente de encontrar el valor máximo?

@Edit : Acabo de encontrar una solución para la que no estoy muy seguro

ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(100); /* add(200), add(250) add(350) add(150) add(450)*/

Integer i = Collections.max(arrayList)

y esto devuelve el valor más alto.

Otra forma de comparar cada valor, por ejemplo selection sort or binaray sort algorithm

249voto

gotomanners Puntos 2707

Ordena la matriz en orden ascendente o descendente y escoge el primer o último elemento de la matriz dependiendo del orden.

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

EDITAR

Pensándolo bien, puedes utilizar el Collections API para conseguir lo que quieres fácilmente - leer eficientemente - suficiente Javadoc para Collection.max

Collections.max(arrayList);

Devuelve el elemento máximo de la colección dada, según el comparador especificado.

27voto

Robert Quinn Puntos 129

Esta pregunta es de hace casi un año pero he descubierto que si haces un comparador personalizado para objetos puedes usar Collections.max para una lista de objetos Array.

    import java.util.Comparator;
    public class compPopulation implements Comparator<Country>
    {
    public int compare(Country a, Country b)
    {
    if(a.getPopulation() > b.getPopulation()) return -1; // highest value first
    if(a.getPopulation() == b.Population()) return 0;
    return 1;
     }
    }
    ArrayList<Country> X = new ArrayList<Country>();
    // create some country objects and put in the list
    Country ZZ = Collections.max(X, new compPopulation());

16voto

John Puntos 41
public int getMax(ArrayList list){
    int max = Integer.MIN_VALUE;
    for(int i=0; i<list.size(); i++){
        if(list.get(i) > max){
            max = list.get(i);
        }
    }
    return max;
}

A mi entender, esto es básicamente lo que hace Collections.max(), aunque utilizan un comparador ya que las listas son genéricas.

13voto

Bhavin Shah Puntos 111

Podemos utilizar simplemente Collections.max() y Collections.min() método.

public class MaxList {
    public static void main(String[] args) {
        List l = new ArrayList();
        l.add(1);
        l.add(2);
        l.add(3);
        l.add(4);
        l.add(5);
        System.out.println(Collections.max(l)); // 5
        System.out.println(Collections.min(l)); // 1
    }
}

5voto

Brendan Long Puntos 24372

No hay una manera particularmente eficiente de encontrar el valor máximo en una lista no ordenada -- sólo hay que comprobarlos todos y devolver el valor más alto.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X