Comment utiliser Comparable et Comparator en Java
Comparable et Comparator
Comparable et Comparator sont deux interfaces Java liées au tri, également connues sous le nom de tri naturel et de tri personnalisé. J'ai récemment lu du contenu pertinent et je vais maintenant enregistrer mon propre statut d'apprentissage ci-dessous.
Comparable et Comparator sont deux interfaces de tri, utilisées pour implémenter la fonction de tri dans les collections Java. Les fonctions spécifiques peuvent être obtenues à partir de l'API.
Comparable
Voici une brève introduction tirée de la documentation de l'API :
Cette interface impose un ordre total sur les objets de chaque classe qui l'implémente. Cet ordre est appelé ordre naturel de la classe, et la classe’ La méthode compareTo est appelée sa méthode de comparaison naturelle. Compare cet objet avec l'objet spécifié pour l'ordre. Renvoie un entier négatif, zéro ou un entier positif car cet objet est inférieur, égal ou supérieur à l'objet spécifié.
Utilisation :
Vous devez implémenter l'interface Comparable de la classe d'entité de tri et remplacer la méthode compareTo() pour avoir la fonction de tri. Certaines collections (telles que TreeSet) qui trient automatiquement les éléments appelleront automatiquement la méthode CompareTo() pour le tri lorsque des éléments sont placés dans la collection (à condition que les éléments doivent implémenter cette interface). Mais il peut également être utilisé dans d’autres endroits, et pas seulement dans TreeSet, il est largement utilisé.
Comparator
Voici une brève introduction tirée de la documentation de l'API :
Une fonction de comparaison, qui impose un ordre total sur certaines collections d'objets, peut être transmise à une méthode de tri (telle que Collections.sort ou Arrays). .sort) pour permettre un contrôle précis de l'ordre de tri. Les comparateurs peuvent également être utilisés pour contrôler l'ordre de certaines structures de données (telles que des ensembles triés ou des cartes triées), ou pour fournir un ordre pour des collections d'objets qui n'ont pas de tri. ordre naturel.
Utilisation :
Comparator est une interface tierce. L'utilisation spécifique est la suivante : concevoir un comparateur, créer une classe, implémenter cette interface et remplacer la méthode compare(). Et comme Comparator est une interface fonctionnelle, les expressions Lambda peuvent être utilisées à la place des objets Comparator, ce qui rend le code plus concis et plus clair.
Parler ne coûte pas cher, montre-moi le code.
Remarque : le contenu du blog peut ne pas être très détaillé, donc si vous voulez voir les détails spécifiques, vous devriez principalement lire des livres et des documents officiels. plus Présentez brièvement l'utilisation de base.
Classe d'entité de test : Chien
public class Dog implements Comparable<Dog>{ private String name; private int age; public Dog(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Dog [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Dog dog) { return this.age > dog.age ? 1 : this.age < dog.age ? -1 : 0; } }
Classe d'entité de test : Chat
public class Cat implements Comparable<Cat>{ private String name; private Integer age; public Cat(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Cat [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Cat o) { //可以直接调用,这样更简单 //调换 o.age 和 this.age 就是相反的顺序 return o.age.compareTo(this.age); } }
Classe de test : Test
public class Test { public static void main(String[] args) { List<Dog> dogs = new LinkedList<>(); List<Cat> cats = new LinkedList<>(); dogs.add(new Dog("大黄",6)); dogs.add(new Dog("大白",1)); dogs.add(new Dog("小黑",5)); dogs.add(new Dog("旺财",3)); dogs.add(new Dog("二哈",2)); cats.add(new Cat("牛牛",3)); cats.add(new Cat("花咪",4)); cats.add(new Cat("咪咪",10)); cats.add(new Cat("小黄",2)); cats.add(new Cat("大橘",6)); //参数为 null 使用 自然排序,否则使用 定制排序 //也可以看出来 定制排序 优先级高于 自然排序 System.out.println("---------自然排序 升序--------"); dogs.sort(null); dogs.forEach(System.out::println); System.out.println("---------自然排序 降序--------"); cats.sort(null); cats.forEach(System.out::println); //定制排序 //Comparator<Dog> c = (e1,e2)->e2.getAge() - e1.getAge(); //dogs.sort(c) 这个就是下面这个的具体形式, //可以看出来参数是一个 Comparator 对象 System.out.println("---------定制排序 降序--------"); dogs.sort((e1,e2)->e2.getAge() - e1.getAge()); //流式API的简单的应用,效果和上面的类似,或者直接使用 forEacn 循环遍历 dogs.stream().forEach(System.out::println); System.out.println("---------定制排序 升序--------"); // 另一种遍历方式,可以看出来函数式编程非常灵活,我也是初学,觉得很神奇。 cats.stream() .sorted((e1,e2)->e1.getAge()-e2.getAge()) .forEach(System.out::println); } }
Capture d'écran en cours d'exécution : Instructions supplémentaires :
Méthode Description dans la documentation de l'API :
Trie cette liste selon l'ordre induit par le comparateur spécifié.list.sort()
Tous les éléments de cette liste doivent être mutuellement comparables à l'aide du comparateur spécifié (c.compare(e1, e2) ne doit pas lancez une ClassCastException pour tous les éléments e1 et e2 de la liste). Si le comparateur spécifié est nul, alors tous les éléments de cette liste doivent implémenter l'interface Comparable et l'ordre naturel des éléments doit être utilisé. Cette liste doit être modifiable, mais pas nécessairement. redimensionnable.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4
