Maison  >  Article  >  Java  >  Comparaison et utilisation de Comparable et Comparator

Comparaison et utilisation de Comparable et Comparator

零下一度
零下一度original
2017-07-24 10:19:141318parcourir

Un aperçu

1. Contexte de l'utilisation de Comparable et Comparator

Données numériques (octet int court long flottant double) Il est intrinsèquement de taille comparable et triable. String implémente l'interface Comparable et peut également comparer les tailles et trier. Cependant, il existe de nombreux types de classes personnalisées et il n'existe pas d'indicateur commun pouvant être utilisé comme indicateur de tri. est nécessaire d'établir manuellement une comparaison dans la méthode personnalisée, à cet effet, java fournit deux interfaces Comparable et Comparator.

2. Tri des collections

Le tri sous-jacent Collections.sort() repose sur Arrays.sort() et Arrays.sort(). la méthode des bulles est utilisée pour le tri.

2 Comparable

Les objets qui doivent être comparés en taille peuvent implémenter l'interface Comparable et y implémenter la méthode abstraite, qui est utilisée pour définir la méthode de comparaison. Voici un exemple pour illustrer :

1. Classe d'entité

package com.javase.collections.comparable;public class Student implements Comparable<Student> {private String name;private int score;public Student() {super();
    }public Student(String name, int score) {super();this.name = name;this.score = score;
    }public String getName() {return name;
    }public void setName(String name) {this.name = name;
    }public int getScore() {return score;
    }public void setScore(int score) {this.score = score;
    }

    @Overridepublic int compareTo(Student stu) {return this.score - stu.score;// 操作对象减去参数对象,升序排列,反之降序。    }

}

dans la méthode compareTo(). , en utilisant l'attribut score comme index de tri, en utilisant "this.score-stu.score", les résultats finaux sont classés par ordre croissant, et vice versa.

2. Classe de test

package com.javase.collections.comparable;import java.util.ArrayList;import java.util.Collections;import java.util.List;import org.junit.Test;public class ComparableTest {

    @Testpublic void testComparable() {
        List<Student> stus = new ArrayList<Student>();
        Student zhangsan = new Student("zhangsan", 100);
        Student lisi = new Student("lisi", 90);
        Student wanger = new Student("wanger", 95);
        stus.add(zhangsan);
        stus.add(lisi);
        stus.add(wanger);
        System.out.println("排序前");for (Student x : stus) {
            System.out.println(x.getName() + "::" + x.getScore());
        }
        System.out.println("排序后");
        Collections.sort(stus);for (Student x : stus) {
            System.out.println(x.getName() + "::" + x.getScore());
        }
    }

}

Sortie :

Trois comparateurs

Si une classe n'implémente pas l'interface Comparable lors de sa création, vous espérez la comparer sans en modifiant le code source. Pour trier ses objets, vous pouvez implémenter l'interface Comparator et spécifier la méthode de tri lors de l'appel de la méthode de tri. Voici un exemple pour illustrer :

1. Classe d'entité

package com.javase.collections.comparator;public class Student {private String name;private int score;public Student() {super();
    }public Student(String name, int score) {super();this.name = name;this.score = score;
    }public String getName() {return name;
    }public void setName(String name) {this.name = name;
    }public int getScore() {return score;
    }public void setScore(int score) {this.score = score;
    }

}

2. 🎜 >

package com.javase.collections.comparator;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import org.junit.Test;public class ComparatorTest {

    @Testpublic void test() {
        List<Student> stus = new ArrayList<Student>();
        Student zhangsan = new Student("zhangsan", 100);
        Student lisi = new Student("lisi", 90);
        Student wanger = new Student("wanger", 95);
        stus.add(zhangsan);
        stus.add(lisi);
        stus.add(wanger);
        System.out.println("排序前");for (Student x : stus) {
            System.out.println(x.getName() + "::" + x.getScore());
        }
        System.out.println("-----------------------");
        Collections.sort(stus, new Comparator<Student>() {
            @Overridepublic int compare(Student stu01, Student stu02) {// return stu01.getScore() - stu02.getScore();//升序return stu02.getScore() - stu01.getScore();// 降序            }
        });

        System.out.println("排序后");for (Student x : stus) {
            System.out.println(x.getName() + "::" + x.getScore());
        }
    }

}

Dans la méthode compare(Student stu01, Student stu02), utilisez l'attribut score comme indicateur de tri et utilisez "stu01.score-stu02.score ". Enfin Les résultats sont triés par ordre croissant et vice versa par ordre décroissant.

Sortie :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn