Hay una ArrayList que almacena valores enteros. Necesito encontrar el valor máximo en esta lista. Por ejemplo, supongamos que los valores almacenados de 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 binary sort algorithm
null
valores: stackoverflow.com/questions/369383/…Respuestas:
Puede usar el
Collections API
para lograr lo que desea fácilmente, leer de manera eficiente , suficiente Javadoc para Collections.maxfuente
O(n log(n))
pero si "No hay una forma particularmente eficiente", ¿qué propone que sea una mejor solución además de verificarlas todas?Esta pregunta tiene casi un año de antigüedad, pero descubrí que si hace un comparador personalizado para objetos, puede usar Collections.max para obtener una lista de objetos.
fuente
Según tengo entendido, esto es básicamente lo que hace Collections.max (), aunque usan un comparador ya que las listas son genéricas.
fuente
Simplemente podemos usar
Collections.max()
yCollections.min()
método.fuente
La clase Integer implementa Comparable, por lo que podemos obtener fácilmente el valor máximo o mínimo de la lista Integer.
Si una clase no implementa Comparable y tenemos que encontrar el valor máximo y mínimo, entonces tenemos que escribir nuestro propio Comparador.
fuente
Comparator.comparing
En Java 8, las colecciones se han mejorado mediante el uso de lambda. Por lo tanto, encontrar max y min se puede lograr de la siguiente manera, usando
Comparator.comparing
:Código:
Salida:
fuente
No hay una forma particularmente eficiente de encontrar el valor máximo en una lista sin clasificar: solo necesita verificarlos todos y devolver el valor más alto.
fuente
i = Collections.max(arrayList)
? devuelve el valor más alto en mi caso si no estoy muy seguro. ¿Que dices?Aquí hay tres formas más de encontrar el valor máximo en una lista, utilizando secuencias:
Todos estos métodos, al igual que
Collections.max
, iteran sobre toda la colección, por lo tanto, requieren un tiempo proporcional al tamaño de la colección.fuente
Java 8
Como los enteros son comparables, podemos usar el siguiente revestimiento en:
Otro punto a tener en cuenta es que no podemos usar
Funtion.identity()
en lugar dei->i
lomapToInt
esperado,ToIntFunction
que es una interfaz completamente diferente y no está relacionadaFunction
. Además, esta interfaz solo tiene un métodoapplyAsInt
y ningúnidentity()
método.fuente
Aquí está la función
fuente
fuente
Además de la respuesta de gotomanners , en caso de que alguien más viniera aquí buscando una solución segura nula para el mismo problema, esto es lo que terminé con
fuente
En Java8
fuente
fuente
dependiendo del tamaño de su matriz, una solución multiproceso también podría acelerar las cosas
fuente