编程知识 cdmana.com

Comparateur en Java

Un.、ComparableIntroduction

ComparableC'est l'interface de tri.Si une classe implémenteComparableInterface,Cela signifie que cette classe supporte le tri.C'est fait.ComparableUne liste ou un tableau d'objets d'une classe d'interface peut être téléchargé à partir deCollections.sortOuArrays.sortTrier automatiquement.

En outre,L'objet qui implémente cette interface peut être utilisé comme clé dans une carte ordonnée ou comme collection dans une collection ordonnée,Il n'est pas nécessaire de spécifier un comparateur.Cette interface est définie comme suit::

package java.lang;
import java.util.*;
public interface Comparable<T> 
{
    
    public int compareTo(T o);
}

TReprésente les types d'objets qui peuvent être comparés à cet objet.

Il n'y a qu'une seule méthode pour cette interfacecompareTo,Comparer l'ordre de cet objet avec l'objet spécifié,Si l'objet est inférieur à、égal ou supérieur à l'objet spécifié,Renvoie un entier négatif respectivement、Zéro ou entier positif.

Supposons maintenantPersonCatégorie,Les codes sont les suivants::

public class Person
{
    
    String name;
    int age;
    public Person(String name, int age)
    {
    
        super();
        this.name = name;
        this.age = age;
    }
    public String getName()
    {
    
        return name;
    }  public int getAge()
    {
    
        return age;
    }
}

Il y en a deux maintenant.PersonObjet de la classe,Comment comparer la taille des deux?
On peut le faire en faisantPersonRéalisationComparableInterface:

public class Person implements Comparable<Person>
{
    
    String name;
    int age;
    public Person(String name, int age)
    {
    
        super();
        this.name = name;
        this.age = age;
    }
    public String getName()
    {
    
        return name;
    }
    public int getAge()
    {
    
        return age;
    }
    @Override
    public int compareTo(Person p)
    {
    
        return this.age-p.getAge();
    }
    public static void main(String[] args)
    {
    
        Person[] people=new Person[]{
    new Person("xujian", 20),new Person("xiewei", 10)};
        System.out.println("Avant le tri");
        for (Person person : people)
        {
    
            System.out.print(person.getName()+":"+person.getAge());
        }
        Arrays.sort(people);
        System.out.println("\nAprès tri");
        for (Person person : people)
        {
    
            System.out.print(person.getName()+":"+person.getAge());
        }
    }
}

2.、ComparatorIntroduction
  ComparatorEst l'interface de comparaison,Si nous devons contrôler l'ordre d'une classe,Et la classe elle - même ne supporte pas le tri(C'est - à - dire qu'il n'y a pas de mise en oeuvreComparableInterface),Alors on peut construire un“Les comparateurs de cette classe”Pour trier,C'est“Le comparateur”Il suffit de réaliserComparatorInterface OK.C'est - à - dire,Nous pouvons le faireComparatorPour créer un nouveau comparateur,Les classes sont ensuite triées par ce comparateur.Cette interface est définie comme suit::

package java.util;
public interface Comparator<T>
 {
    
    int compare(T o1, T o2);
    boolean equals(Object obj);
 }

Attention!:1、Si une classe veut implémenterComparatorInterface:Il doit être réalisécompare(T o1, T o2) Fonctions,Mais ça ne peut pas être fait equals(Object obj) Fonctions.

2、int compare(T o1, T o2) - Oui.“Comparaisono1Eto2Taille”.Retour“Nombre négatif”,Ce qui signifie“o1Queo2Petit”;Retour“Zéro.”,Ce qui signifie“o1égal ào2”;Retour“Nombre positif”,Ce qui signifie“o1Plus grand queo2”.

Maintenant, supposons quePersonLa classe n'est pas implémentéeComparableInterface,Comment comparer la taille?On pourrait créer une nouvelle classe,Que ça se réaliseComparatorInterface,Pour construire un“Le comparateur".

public class PersonCompartor implements Comparator<Person>
{
    
    @Override
    public int compare(Person o1, Person o2)
    {
    
        return o1.getAge()-o2.getAge();
    }
}

Maintenant nous pouvons utiliser ce comparateur pour le trier:

public class Person
{
    
    String name;
    int age;
    public Person(String name, int age)
    {
    
        super();
        this.name = name;
        this.age = age;
    }
    public String getName()
    {
    
        return name;
    }
    public int getAge()
    {
    
        return age;
    }
    public static void main(String[] args)
    {
    
        Person[] people=new Person[]{
    new Person("xujian", 20),new Person("xiewei", 10)};
        System.out.println("Avant le tri");
        for (Person person : people)
        {
    
            System.out.print(person.getName()+":"+person.getAge());
        }
        Arrays.sort(people,new PersonCompartor());
        System.out.println("\nAprès tri");
        for (Person person : people)
        {
    
            System.out.print(person.getName()+":"+person.getAge());
        }
    }
}

Trois、ComparableEtComparatorComparaison des différences

ComparableC'est l'interface de tri,Si une classe implémenteComparableInterface,Ce qui signifie“Cette classe supporte le tri”.EtComparatorC'est un comparateur.,Si nous devons contrôler l'ordre d'une classe,Peut créer un“Les comparateurs de cette classe”Pour trier.

Comparableéquivalent à“Comparateur interne”,EtComparatoréquivalent à“Comparateur externe”.

Les deux méthodes ont leurs avantages et leurs inconvénients, AvecComparable Simple., Il suffit de réaliserComparable L'objet de l'interface devient directement un objet comparable,Mais le code source doit être modifié. AvecComparator L'avantage est qu'il n'est pas nécessaire de modifier le code source, Mais plutôt mettre en place un autre comparateur, Quand un objet personnalisé doit être comparé,Passer le Comparateur avec l'objet dans le passé peut être comparé à la taille, Et dansComparator À l'intérieur, les utilisateurs peuvent réaliser eux - mêmes une logique complexe et universelle,Pour correspondre à des objets plus simples,Cela permettra d'économiser beaucoup de travail répétitif.

Comparable Est de rendre les éléments comparables ,Comparator Est de rendre le conteneur comparable

版权声明
本文为[Vers le Haut]所创,转载请带上原文链接,感谢
https://cdmana.com/2022/01/202201080601056229.html

Scroll to Top