6
votes

Obtenir les 3 meilleures valeurs les plus élevées dans ArrayList?

J'ai une arrayliste remplie d'entiers. J'ai juste besoin d'un moyen d'obtenir les trois premiers entiers dans le tableau.


1 commentaires

À partir des réponses reçues, il est clair qu'il y a deux interprétations de votre question. Voulez-vous les 3 premiers articles, ou les 3 plus gros articles?


6 Réponses :


1
votes

Vous devez écrire votre propre comparateur et utiliser collections.sort (liste, comparateur) sur votre liste , qui apportera le top 3 entiers au sommet (ceci est purement basé sur la logique de votre comparateur).


2 commentaires

Eh bien, c'est à la hauteur de l'OP. Même s'il fait un subliste, il devra toujours traverser la liste pour les obtenir. Au lieu de cela, il pouvait simplement traverser la liste triée jusqu'à la 3ème position et obtenir les valeurs! IMHO, nous devrions laisser cette partie à l'op!


En regardant la question et les tags, je pense que cela est davantage à propos de trier la liste que tout autre chose!



0
votes

Utilisez collections.sort pour trier et récupérer les trois premières valeurs


0 commentaires

0
votes

mettre tous les éléments dans un arbreset à l'aide de arbreset (collection c) constructeur puis utilisez arbreset.descendatorator pour obtenir les 3 premiers éléments. Une liste peut contenir des doublons, en utilisant des garanties de Treeet que vous récupérez 3 valeurs plus grandes distinctes.


0 commentaires

8
votes
List<Integer> list;
Collections.sort(list);
List<Integer> top3 = new ArrayList<Integer>(list.subList(list.size() -3, list.size()));
I could have simply used the subList, but the list returned from subList() is a view on the base list, so changes made there would be reflected in top3.

0 commentaires

0
votes

Utiliser Liste # SUBLIST (INT DEIDEX, INT TOINDEX)

Renvoie une vue de la partie de cette liste entre le tiindex spécifié, inclus, et toindex, exclusif. xxx

selon les documents sublistes


0 commentaires

1
votes

Cela dépend de la taille de la liste et de la performance que vous souhaitez. Si la liste est "petite", l'une des solutions antérieures suffira, en fonction de vos besoins.

Si la liste est "grande" et la performance est importante, vous devez itérer via la liste et conserver le 3 plus grand à votre guise.

Un autre compromis est votre temps et vos bugs à l'aide de bibliothèques. Une des approches de la bibliothèque mentionnées fonctionnera dans moins de votre programmeur-Time qu'une solution codée personnalisée


0 commentaires