J'ai un employé de classe implémentant une interface comparable

public class Employee implements Comparable<Employee> {

        private int id;
        private String name;
        private int age;
        private long salary;

        public Employee(int id, String name, int age, int salary) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
        }

        @Override
        public int compareTo(Employee emp) {
        return (this.id - emp.id);
        }

        @Override
        public String toString() {
        return "[id=" + this.id + ", name=" + this.name + ", age=" + this.age + ", salary=" +
            this.salary + "]";
        }

}

J'ai un tableau Employee[] Je trie le tableau en utilisant Arrays.sort()

Employee[] empArr = new Employee[4];
empArr[0] = new Employee(10, "Mikey", 25, 10000);
empArr[1] = new Employee(20, "Arun", 29, 20000);
empArr[2] = new Employee(5, "Lisa", 35, 5000);
empArr[3] = new Employee(1, "Pankaj", 32, 50000);

Arrays.sort(empArr);

Ma question est de savoir comment le tri fonctionne en interne, est-ce comme emArr[0].compareTo(emArr[1]) puis échangez l'élément si nécessaire?

Je veux savoir comment la comparaison et l'échange se produisent à l'intérieur? et quel rôle jouent Comparatable's compareTo(Object o) et Comparator's compare(o1,o2)?

-2
Govinda Sakhare 5 avril 2017 à 20:27

2 réponses

Meilleure réponse

Il existe déjà des techniques de tri pour organiser n'importe quelle collection d'articles dans une commande. Les classes d'utilitaires Java comme les tableaux et les collections utilisent ces techniques. Pour qu'une telle technique de tri fonctionne, il est important de définir comment décider lequel des deux objets est le plus grand.

Ces informations sont fournies dans l'implémentation de compareTo() dans le cas où la classe Object implémente l'interface Comparable.

Ces informations peuvent également être fournies dans l'implémentation de la méthode compare() de la classe Comparator. La classe Comparator est utile dans le cas où vous souhaitez définir un ordre différent selon l'exigence (peut être basé sur un paramètre pendant l'exécution). Il est possible que la classe de l'entité implémente l'interface Comparable, mais nous souhaitons que, dans certains cas spécifiques, le tri soit d'un ordre différent ou basé sur un autre paramètre.

En savoir plus sur Comparable https: // docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

Et Comparator https: // docs. oracle.com/javase/7/docs/api/java/util/Comparator.html

1
nits.kk 10 juin 2018 à 10:23

Comparable implique un ordre naturel. De manière générale if A.compareTo(B) == 0 then A.equals(B) == true (c'est une convention générale qui n'est pas toujours suivie).

Comparator est utilisé lorsque vous souhaitez trier par autre chose que l'ordre naturel. Par exemple, vous souhaitez ordonner un tableau d'entiers de sorte que tous les nombres pairs apparaissent en premier.

Arrays.sort() utilise un tri par fusion. Voir le API Arrays pour plus de détails.

0
axemoi 5 avril 2017 à 17:40