La différence entre comparable et Comparator en Java
Comparateur Comparable
Comparable se trouve sous le package java.lang. Il s'agit essentiellement d'un comparateur interne qui implémente Comparable peut lui-même comparer. , quant au résultat de la comparaison, il dépend de la mise en œuvre de la méthode de comparaison naturelle compareTo.
Les valeurs de retour de compareTo sont -1, 0, 1. Si le comparateur est supérieur à l'objet comparé, 1 est renvoyé, 0 est renvoyé s'il est égal et -1 est renvoyé s'il est inférieur à l'objet comparé.
Collections.sort
et Arrays.sort
peuvent trier automatiquement les objets qui implémentent Comparable.
Recommandation de vidéo d'apprentissage en ligne gratuite : apprentissage Java
L'exemple est le suivant, nous construisons un objet nœud et vérifions l'utilisation de Comparable via une comparaison entre les objets nœuds.
L'implémentation de l'objet node est la suivante :
public class Node implements Comparable<Object>{ private int num; private String name; @Override public String toString() { return "num=" + num + " name=" + name; } public Node(int num, String name) { super(); this.num = num; this.name = name; } public Node() { super(); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Object o) { Node node = (Node)o; return this.num - node.getNum(); } }
Comme vous pouvez le voir, nous avons implémenté l'interface Comparable pour Node et remplacé la méthode compareTo.
Pour le tester d'abord, nous créons 10 objets Node et les ajoutons à la liste, puis mélangeons l'ordre.
public class MyTest { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); for(int i = 0;i < 10;i++) { list.add(new Node(i,"node")); } //打乱顺序 Collections.shuffle(list); for (Node node : list) { System.out.println(node); } } }
Le résultat s'affiche comme suit :
num=7 name=node num=0 name=node num=5 name=node num=9 name=node num=6 name=node num=3 name=node num=4 name=node num=8 name=node num=1 name=node num=2 name=node
Maintenant, la sortie est dans le désordre, nous utilisons ensuite Collections.sort pour la trier.
public class MyTest { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); for(int i = 0;i < 10;i++) { list.add(new Node(i,"node")); } //打乱顺序 Collections.shuffle(list); Collections.sort(list); for (Node node : list) { System.out.println(node); } } }
Collections.sort compare en fait selon la définition de la méthode compareTo Nous avons précédemment défini le tri par ordre croissant de nombre. Maintenant, les résultats du tri sont les suivants :
num=0 name=node num=1 name=node num=2 name=node num=3 name=node num=4 name=node num=5 name=node num=6 name=node num=7 name=node num=8 name=node num=9 name=node
Comparateur.
Comparator
est situé sous le package java.util
et est essentiellement un comparateur externe. Si une classe n’implémente pas Comparable en interne ou implémente Comparable mais que la méthode de comparaison ne vous convient pas, nous pouvons envisager d’implémenter Comparator. Il existe une méthode de comparaison dans l'interface Comparator et la méthode d'utilisation est la même que compareTo dans Comparable.
Nous devons passer un Comparator à la méthode de tri afin de contrôler l'ordre de tri. Nous pouvons vérifier l'utilisation de plusieurs méthodes de tri et constater qu'elles peuvent transmettre un paramètre Comparator.
Collections.sort(List<T> list, Comparator<? super T> c); Arrays.sort(T[] a, Comparator<? super T> c);
Modifiez notre précédent objet Node et n'implémentez plus Comparable.
public class Node{ private int num; private String name; @Override public String toString() { return "num=" + num + " name=" + name; } public Node(int num, String name) { super(); this.num = num; this.name = name; } public Node() { super(); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
On essaye de trier par ordre décroissant en passant dans un Comparator.
public class MyTest { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); for(int i = 0;i < 10;i++) { list.add(new Node(i,"node")); } //打乱顺序 Collections.shuffle(list); Collections.sort(list, new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { return o2.getNum()-o1.getNum(); } }); for (Node node : list) { System.out.println(node); } } }
Les résultats sont les suivants :
num=9 name=node num=8 name=node num=7 name=node num=6 name=node num=5 name=node num=4 name=node num=3 name=node num=2 name=node num=1 name=node num=0 name=node
Comparator implémente la comparaison par ordre inverse.
Résumé
Comparable est un comparateur interne, et Comparator est un comparateur externe. Si la classe n'implémente pas l'interface Comparable mais doit être triée, nous pouvons envisager. en utilisant le comparateur. D'un autre point de vue, le couplage de l'utilisation de l'interface Comparable est supérieur à celui de Comparator, car lorsque nous devons modifier l'algorithme de comparaison, nous devons également modifier la classe d'implémentation de Comparable.
Cet article est issu de la rubrique Java Quick Start Tout le monde est invité à discuter et à apprendre ensemble !
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)

Dans le langage C, la principale différence entre Char et WCHAR_T est le codage des caractères: Char utilise ASCII ou étend ASCII, WCHAR_T utilise Unicode; Char prend 1 à 2 octets, WCHAR_T occupe 2-4 octets; Char convient au texte anglais, WCHAR_T convient au texte multilingue; Le char est largement pris en charge, WCHAR_T dépend de la prise en charge du compilateur et du système d'exploitation Unicode; Le char est limité dans la gamme de caractères, WCHAR_T a une gamme de caractères plus grande et des fonctions spéciales sont utilisées pour les opérations arithmétiques.

La différence entre le multithreading et l'asynchrone est que le multithreading exécute plusieurs threads en même temps, tandis que les opérations effectuent de manière asynchrone sans bloquer le thread actuel. Le multithreading est utilisé pour les tâches à forte intensité de calcul, tandis que de manière asynchrone est utilisée pour l'interaction utilisateur. L'avantage du multi-threading est d'améliorer les performances informatiques, tandis que l'avantage des asynchrones est de ne pas bloquer les threads d'interface utilisateur. Le choix du multithreading ou asynchrone dépend de la nature de la tâche: les tâches à forte intensité de calcul utilisent le multithreading, les tâches qui interagissent avec les ressources externes et doivent maintenir la réactivité de l'interface utilisateur à utiliser asynchrone.

Les fonctions de langue C sont la base de la modularisation du code et de la construction de programmes. Ils se composent de déclarations (en-têtes de fonction) et de définitions (corps de fonction). Le langage C utilise des valeurs pour transmettre les paramètres par défaut, mais les variables externes peuvent également être modifiées à l'aide d'adresse Pass. Les fonctions peuvent avoir ou ne pas avoir de valeur de retour et le type de valeur de retour doit être cohérent avec la déclaration. La dénomination de la fonction doit être claire et facile à comprendre, en utilisant un chameau ou une nomenclature de soulignement. Suivez le principe de responsabilité unique et gardez la simplicité de la fonction pour améliorer la maintenabilité et la lisibilité.

Le char et le char non signé sont deux types de données qui stockent les données des caractères. La principale différence est le moyen de gérer les nombres négatifs et positifs: plage de valeur: char signé (-128 à 127), et Char non signé Unsigned (0 à 255). Traitement du nombre négatif: le char peut stocker des nombres négatifs, le char non signé ne peut pas. Mode bit: Char le bit le plus élevé représente le symbole, un bit non signé non signé. Opérations arithmétiques: le char et le char non signé sont signés et non signés, et leurs opérations arithmétiques sont différentes. Compatibilité: char et char non signé

H5. La principale différence entre les mini programmes et l'application est: Architecture technique: H5 est basé sur la technologie Web, et les mini-programmes et l'application sont des applications indépendantes. Expérience et fonctions: H5 est légère et facile à utiliser, avec des fonctions limitées; Les mini-programmes sont légers et ont une bonne interactivité; Les applications sont puissantes et ont une expérience fluide. Compatibilité: H5 est compatible multiplateforme, les applets et les applications sont limités par la plate-forme. Coût de développement: H5 a un faible coût de développement, des mini-programmes moyens et une application la plus élevée. Scénarios applicables: H5 convient à l'affichage d'informations, les applets conviennent aux applications légères et les applications conviennent aux fonctions complexes.

Bien que C et C # aient des similitudes, ils sont complètement différents: C est une gestion manuelle de la mémoire manuelle et un langage dépendant de la plate-forme utilisé pour la programmation système; C # est un langage orienté objet, des ordures et un langage indépendant de la plate-forme utilisé pour le bureau, l'application Web et le développement de jeux.

Explication détaillée de la méthode de recherche XPATH sous les nœuds DOM en JavaScript, nous devons souvent trouver des nœuds spécifiques de l'arbre Dom basé sur les expressions XPath. Si vous avez besoin de ...

La nécessité d'enregistrer VUerouter dans le fichier index.js dans le dossier du routeur Lors du développement d'applications VUE, vous rencontrez souvent des problèmes de configuration de routage. Spécial...
