Tri par plusieurs champs en Java
Le tri des données est une tâche courante en Java, en particulier lorsque vous travaillez avec des objets complexes. Lors du tri par plusieurs champs, l’ordre des opérations devient crucial. Considérons un scénario :
Défi :
Étant donné un tableau d'objets Personne avec les attributs âge et nom, comment pouvez-vous trier ce tableau par ordre alphabétique par nom puis par âge ? Quel algorithme conviendrait pour cette tâche ?
Solution :
Pour trier une collection d'objets par plusieurs champs, Java fournit Collections.sort. Ceci peut être réalisé en utilisant un comparateur pour définir la logique de tri. Voici comment vous pouvez l'implémenter :
private static void order(List<Person> persons) { Collections.sort(persons, new Comparator() { public int compare(Object o1, Object o2) { String x1 = ((Person) o1).getName(); String x2 = ((Person) o2).getName(); int sComp = x1.compareTo(x2); if (sComp != 0) { return sComp; } Integer x1 = ((Person) o1).getAge(); Integer x2 = ((Person) o2).getAge(); return x1.compareTo(x2); }}); }
Cet algorithme de tri compare d'abord les noms des objets. Si les noms sont égaux, il procède à une comparaison de leurs âges. La méthode compareTo est utilisée pour les comparaisons de chaînes et d'entiers.
Algorithme :
L'algorithme utilisé ici est un hybride de tri par fusion et de tri rapide. Collections.sort utilise une variante de Timsort, qui est un algorithme de tri hybride efficace qui tire parti du fait que le tableau est partiellement trié par nom.
Résultat :
Lors de l'exécution de la méthode de commande, la liste fournie des objets Personne sera triée par ordre alphabétique par nom puis par âge.
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!