Java >> Tutoriel Java >  >> Java

Comment trier les objets de la Collection en Java ?

Trier les objets de la Collection

  • Ce concept est lié au tri et nous allons voir ici comment trier les objets sur la Collection ?
  • En Java, nous avons des collections de classes utilitaires qui fournissent diverses méthodes pour effectuer diverses tâches et l'une des méthodes de la classe Collection est liée au tri comme sort().
  • Nous pouvons implémenter le tri sur l'objet Collection de deux manières :
    1. En utilisant Comparable
    2. En utilisant le comparateur
  • Lorsque nous appelons Collections.sort(). Il trie un objet en fonction du tri naturel ou du tri par défaut (c'est-à-dire l'ordre croissant) spécifié dans la méthode compareTo().
  • Lorsque nous appelons Collections.sort(Comparator). Il trie un objet en fonction d'un tri personnalisé (c'est-à-dire ordre croissant ou ordre décroissant) spécifié dans la méthode compare() de Comparator.

Nous verrons les manières de trier une par une...

1) En utilisant le comparateur

  • Si nous passons l'objet Comparator dans le constructeur de la classe Collection, notre méthode compare() sera exécutée.
  • Lorsque nous voulons personnaliser le tri, nous devons opter pour Comparator.
  • Il est possible d'implémenter un tri personnalisé en utilisant l'interface Comparator. (Le tri personnalisé signifie que selon notre besoin, qu'il soit ascendant ou descendant).

Exemple :

import java.util.*;

class TreeSetClass {
    public static void main(String[] args) {
        // Here we are passing Comparator object in Collection 
        // class constructor for custoize sorting
        TreeSet ts = new TreeSet(new CustomizeSorting());

        // adding elements to TreeSet
        ts.add(10);
        ts.add(40);
        ts.add(30);
        ts.add(20);

        // Customized Sorted List
        System.out.println("Customize sorting :" + ts);
    }
}

// Here we are implementing Comparator interface
class CustomizeSorting implements Comparator {
    // Here we are overrding compare() method of Comparator
    public int compare(Object obj1, Object obj2) {

        Integer i1 = (Integer) obj1;
        Integer i2 = (Integer) obj2;

        return -i1.compareTo(i2);
    }
}

Sortie

E:\Programs>javac TreeSetClass.java

E:\Programs>java TreeSetClass
Customize sorting :[40, 30, 20, 10]

2) En utilisant une interface comparable

  • Pour les classes comparables prédéfinies, le tri naturel par défaut est déjà disponible.
  • Pour les classes non comparables prédéfinies, le tri naturel par défaut n'est pas encore disponible.
  • Pour que nos classes personnalisées définissent le tri naturel, nous devrions opter pour Comparable.
  • En cas de tri naturel par défaut, l'objet obligatoire doit être homogène et comparable, sinon nous obtiendrons CCE (ClassCastException).

Exemple :

import java.util.*;

class TreeSetClass {
    public static void main(String[] args) {
        Student s1 = new Student(10);
        Student s2 = new Student(30);
        Student s3 = new Student(70);
        Student s4 = new Student(20);

        // Here we are not passing Comparator object in Collection 
        // class constructor for default sorting
        TreeSet ts = new TreeSet();

        // adding elements to TreeSet
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);

        // Customized Sorted List
        System.out.println("Default sorting :" + ts);
    }
}

// Here we are implementing Comparable interface
class Student implements Comparable {
    int code;

    Student(int code) {
        this.code = code;
    }

    public String toString() {
        return " Code - " + code;
    }

    // Here we are overrding compare() method of Comparable interface
    public int compareTo(Object obj) {
        int code1 = this.code;
        Student intermediate = (Student) obj;
        int code2 = intermediate.code;

        if (code1 < code2)
            return -1;
        else if (code1 > code2)
            return +1;
        else
            return 0;
    }
}

Sortie

E:\Programs>javac TreeSetClass.java

E:\Programs>java TreeSetClass
Default sorting :[ Code - 10,  Code - 20,  Code - 30,  Code - 70]

Balise Java