Tri Java ArrayList <Entier>

Eh bien, je suis en stock sur quelque chose de très simple mais je ne peux pas le comprendre.

Tout d'abord, je sais qu'il existe une méthode Collection.sort() , mais ma liste de tableaux est en quelque sorte des liens vers des données vers l'objet principal, et mon tri doit être fait en fonction des données de cet objet.

Like this is a sport competition and ArrayList numbers is keeping numbers of participants that has passed a checkpoint.

Et j'ai besoin de trier cette ArrayList par le meilleur temps de min à max pour les mettre sur qui est à la 1ère place, 2ème etc.

Pour cela, je devrais demander à mon objet Competiton:

    public ArrayList sort (ArrayList numbers)
    for (int i=0;i sortedArray
 where all this will be sorted by this time parameter from minimal to maximum*/
    return sortedArray;
    }

ce n'est pas le code réel, mais vous avez l'idée. Je me suis contenté d'essayer de trouver une solution apparemment facile. S'il vous plaît Aide

0
ajouté édité
Vues: 1

4 Réponses

It seems awkward to sort an ArrayList based on other things that have nothing directly to do with what you actually want to sort on -- the times.

I would design it differently. It looks you have some kind of object defined on which you can call getTimeOfLastCheckPoint(). For now, I'm assuming it's called Participant. Instead of maintaining an ArrayList to store index-based references to your participants, I would maintain an ArrayList.

Then I would create a class that implements Comparator (perhaps ParticipantComparator) (Comparator javadocs) that knows how to compare Participants based on the results of the call to getTimeOfLastCheckPoint(). Then sorting is simply Collections.sort(participantsArrayList, new ParticipantComparator());.

3
ajouté
this ArrayList Je donne à mon ListAdapter personnalisé qui extrait beaucoup de données de ces nombres. Comme je passe des numéros ArrayList à l'adaptateur et que le nom du participant est List sous ce numéro, son nom, son équipe, etc. L'objet racine que j'ai ici est Compétition, il a une liste de 150 objets des participants où les données à propos du temps, et ainsi de suite est stiored. Donc, je ne passe pas beaucoup de données à l'adaptateur, seulement un lien vers eux dans mon ArrayList
ajouté l'auteur Vlad Alexeev, source

Ecrivez un java.util.Comparator qui compare Integer en les utilisant comme index dans votre tableau de participants:

public class ParticipantIndexComparator implements Comparator {
    final List participants;
    public ParticipantIndexComparator(List participants) {
        this.participants = participants;
    }

    @Override
    public int compare(Integer i1, Integer i2) {
        long l1 = participants.get(i1).getTimeOfLastCheckPoint();
        long l2 = participants.get(i2).getTimeOfLastCheckPoint();
        return Long.compare(l1, l2);
    }
}

Vous pouvez maintenant utiliser ce comparateur pour trier vos entiers:

Collections.sort(numbers, new ParticipantIndexComparator(participants));

Mais avant cela, demandez-vous pourquoi votre liste contient des index Integer qui sont des index pour la liste des participants, au lieu des Participant eux-mêmes!

3
ajouté

Pour moi, cela ressemble à une solution de contournement pour une requête SQL à moitié faite. Dans le cas où vos données résident dans une base de données (et je suis certain que c'est le cas), modifiez votre requête SQL afin que vous n'ayez pas à faire ce tri des données au niveau de l'application. C'est bon pour au moins deux raisons:

  1. Logique d'application Simplyfiy
  2. Accélérer l'exécution (la base de données peut effectuer un tel tri beaucoup plus rapidement)
2
ajouté

Vous pouvez utiliser un Comparator pour trier la liste en fonction de la durée de la course et utiliser aussi chaque boucle Java.

0
ajouté