Il existe une ArrayList qui stocke des valeurs entières. J'ai besoin de trouver la valeur maximale dans cette liste. Par exemple, supposons que les valeurs stockées de arrayList soient: 10, 20, 30, 40, 50
et que la valeur maximale serait 50
.
Quelle est la manière efficace de trouver la valeur maximale?
@Edit: je viens de trouver une solution pour laquelle je ne suis pas très sûr
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(100); /* add(200), add(250) add(350) add(150) add(450)*/
Integer i = Collections.max(arrayList)
et cela renvoie la valeur la plus élevée.
Une autre façon de comparer chaque valeur, par exemple selection sort or binary sort algorithm
null
valeurs: stackoverflow.com/questions/369383/…Réponses:
Vous pouvez utiliser le
Collections API
pour obtenir facilement ce que vous voulez - lire efficacement - assez de Javadoc pour Collections.maxla source
O(n log(n))
mais si "Il n'y a pas de moyen particulièrement efficace", que proposez-vous qui soit une meilleure solution en plus de les vérifier toutes?Cette question a presque un an, mais j'ai constaté que si vous créez un comparateur personnalisé pour les objets, vous pouvez utiliser Collections.max pour une liste d'objets en tableau.
la source
D'après ce que je comprends, c'est essentiellement ce que fait Collections.max (), bien qu'ils utilisent un comparateur car les listes sont génériques.
la source
Nous pouvons simplement utiliser
Collections.max()
etCollections.min()
méthode.la source
La classe Integer implémente Comparable. Ainsi, nous pouvons facilement obtenir la valeur max ou min de la liste Integer.
Si une classe n'implémente pas Comparable et que nous devons trouver les valeurs max et min, nous devons écrire notre propre comparateur.
la source
Comparator.comparing
Dans Java 8, les collections ont été améliorées à l'aide de lambda. Ainsi, trouver max et min peut être accompli comme suit, en utilisant
Comparator.comparing
:Code:
Production:
la source
Il n'y a pas de moyen particulièrement efficace de trouver la valeur maximale dans une liste non triée - il vous suffit de les vérifier toutes et de renvoyer la valeur la plus élevée.
la source
i = Collections.max(arrayList)
. il renvoie la valeur la plus élevée dans mon cas si je ne suis pas très sûr. ce que tu dis?Voici trois autres façons de trouver la valeur maximale dans une liste, à l'aide de flux:
Toutes ces méthodes, tout comme
Collections.max
, itèrent sur toute la collection, elles nécessitent donc un temps proportionnel à la taille de la collection.la source
Java 8
Comme les entiers sont comparables, nous pouvons utiliser la ligne suivante dans:
Un autre point à noter est que nous ne pouvons pas utiliser
Funtion.identity()
à la place dei->i
commemapToInt
prévuToIntFunction
qui est une interface complètement différente et n'est pas liée àFunction
. De plus, cette interface n'a qu'une seule méthodeapplyAsInt
et aucuneidentity()
méthode.la source
Voici la fucntion
la source
la source
En plus de la réponse de gotomanners , au cas où quelqu'un d'autre viendrait ici à la recherche d'une solution nulle et sûre au même problème, c'est ce avec quoi j'ai fini
la source
En Java8
la source
la source
selon la taille de votre baie, une solution multithread peut également accélérer les choses
la source