JavaRush /Blog Java /Random-FR /Utilisation de Java Arrays.sort() sur n'importe quelle li...

Utilisation de Java Arrays.sort() sur n'importe quelle liste d'objets

Publié dans le groupe Random-FR
Le tri peut être délicat, surtout si votre liste Listcontient des wrappers d'objet ( Byte, Integer, Short, Long, Double, Float) plutôt que des types de données numériques primitifs. Je suggère d’utiliser une méthode qui peut être très utile pour résoudre des problèmes simples ou répondre à la question d’un intervieweur. Utilisation de Java Arrays.sort() sur n'importe quelle liste d'objets - 1Tout d'abord, choisissons ce que nous allons remplir notre List. Dans cet exemple, j'utiliserai une liste d'arêtes de graphique ( Edges) à partir d'une structure de données simpleGraph :
// Очень простой класс Edge (рёбро графа)
public class Edge {
    public Vertex src;
    public Vertex dst;
    public double cost;

    // создание ребра между двух вершин
    Edge(Vertex s, Vertex d, double c) {
        src = s;
        dst = d;
        cost = c;
    }
}
// Список рёбер
Edge[] edges = graph.getEdges();

Qu'est-ce qu'un graphique ?

En mathématiques discrètes, un graphe est défini comme une paire d'ensembles ( V, E), où Vest un sous-ensemble d'un ensemble dénombrable arbitraire, et Eest un sous-ensemble ( VхV).

Probablement, pour ceux qui ne sont pas habitués aux abstractions mathématiques, une telle définition ne sera pas très claire, alors disons-le plus simplement :

Un graphe est un ensemble de sommets et d’arêtes qui les relient. Un bon exemple de graphique qui passera immédiatement du domaine de l’abstraction au domaine du matériau est une carte de voies ferrées.

Les sommets d'un tel graphe sont des stations . Eh bien, les chemins entre eux sont des bords .

Ensuite nous définissons l'implémentation de l'interface java.util.Comparator:
class SortByCost implements Comparator<Edge> {
    public int compare(Edge a, Edge b) {
        if ( a.cost < b.cost ) return -1;
        else if ( a.cost == b.cost ) return 0;
        else return 1;
    }
}
Dans cet exemple, nous trierons les arêtes du graphe par leur poids, ou par la distance du sommet src (source) au sommet dst (destination). Finalement, nous utilisons la méthode standard java.util.Arrays.sort ():
Arrays.sort(edges, new SortByCost())
Désormais, notre feuille remplie d'objets Edgesest triée par ordre croissant (du plus petit au plus grand). L'auteur de la solution est Ethan Arrowood.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION