Tri décroissant d'un vector

Résolu
sihem hcine Messages postés 133 Statut Membre -  
sihem hcine Messages postés 133 Statut Membre -
bonsoir ,
Quelqu'un SVP m'aider mon but est de trier un vector des objets décroissant
Je procede comme suit : Collections.reverse(File_Prêt);mais ça ne marche pas
(file pret est un vector des objets processus , u processus ayant comme attributs nom , note (integer) . Je veux trier ce vector par ordre decroissant des notes quelqu'un m'aide SVP

2 réponses

  1. Odenelle Messages postés 108 Statut Membre 20
     
    Salut,

    Collections.reverse(File_Prêt.note)


    Si ça ne marche pas alors je te conseille de faire un bon tri à l'ancienne avec les indices de tes objets (si tu veux opti, je te conseille le Quicksort il est puissant et assez facile à utiliser)
    0
    1. sihem hcine Messages postés 133 Statut Membre
       
      ça ne marche pas puisque la note est un attribut d'objet de type processus.. comment on utilise le quicksort ,pourriez vous m'expliquer le principe SVP
      0
    2. Odenelle Messages postés 108 Statut Membre 20
       
      ah désolé, je ne connais pas les objets processus.
      Voila une page expliquant très bien le principe du quicksort :
      http://openclassrooms.com/courses/le-tri-rapide-qsort

      J'ai oublié de te préciser mais si ton tableau est déjà plus où moins trié mieux vaut choisir un autre tri (par insertion par ex)
      0
    3. sihem hcine Messages postés 133 Statut Membre
       
      okk merciii beaucouup ^^
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Collections.reverse
    prends une liste et renvoie une liste où les éléments sont pris en sens inverse (le premier en dernier etc.)
    Cela n'est donc utile pour faire un tri décroissant que si la liste est déjà triée dans l'ordre croissant, avec
    Collections.sort
    par exemple.

    Deux cas de figure :

    1) La classe Processus implémente l'interface Comparable<Processus> et définit la méthode
    compareTo(Processus)
    de sorte à comparer les notes des processus.
    Dans ce cas tu peux faire un Collections.sort(filePret); pour les trier dans l'ordre croissant puis un Collections.reverse(filePret); pour obtenir l'ordre décroissant.

    2) La classe Processus n'implémente pas l'interface Comparable<Processus> ou définit une méthode compareTo(Processus) qui ne compare pas avec les notes des processus.
    Dans ce cas il faut construire un objet Comparator<Processus> dont la méthode
    compare(Processus,Processus)
    permet d'ordonner deux objets Processus par note décroissante. Il suffit ensuite d'appeler Collections.sort(filePret, comparator); pour trier les valeurs dans cet ordre.

    Voici un exemple dans le deuxième cas.

    En Java 5,6,7 :

    Comparator<Processus> comparator = new Comparator<Processus>() {
        @Override
        public int compare(Processus p1, Processus p2) {
            return p2.getNote() - p1.getNote();
        }
    };
    
    List<Processus> list = Collections.sort(filePret, comparator);

    En Java 8, on peut remplacer le Comparator par une expression lambda :

    List<Processus> list = Collections.sort(filePret,
        (p1,p2) ->  p2.getNote() - p1.getNote());

    La confiance n'exclut pas le contrôle
    0
    1. sihem hcine Messages postés 133 Statut Membre
       
      mercii beaucoup mon problème a été resolu , j'utilise la 2 eme méthode
      0