JavaRush /Java Blog /Random-IT /Utilizzo di Java Arrays.sort() su qualsiasi elenco di ogg...

Utilizzo di Java Arrays.sort() su qualsiasi elenco di oggetti

Pubblicato nel gruppo Random-IT
L'ordinamento può essere complicato, soprattutto se l'elenco Listcontiene wrapper di oggetti ( Byte, Integer, Short, Long, Double, Float) anziché tipi di dati numerici primitivi. Suggerisco di utilizzare un metodo che può essere molto utile per risolvere semplici problemi o rispondere alla domanda di un intervistatore. Utilizzo di Java Arrays.sort() su qualsiasi elenco di oggetti - 1Per prima cosa scegliamo cosa riempiremo il nostro file List. In questo esempio utilizzerò un elenco di bordi del grafico ( Edges) da una semplice struttura dati Graph:
// Очень простой класс 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();

Cos'è un grafico?

Nella matematica discreta, un grafico è definito come una coppia di insiemi ( V, E), dove Vè un sottoinsieme di un insieme numerabile arbitrario ed Eè un sottoinsieme ( VхV).

Probabilmente, per chi non è avvezzo alle astrazioni matematiche, una definizione del genere non risulterà molto chiara, quindi diciamola più semplicemente:

Un grafico è una raccolta di vertici e archi che li collegano. Un buon esempio di grafico che ci porterà immediatamente dal regno dell'astrazione a quello della materia è una mappa dei binari ferroviari.

I vertici di tale grafico sono stazioni . Ebbene, i percorsi tra di loro sono bordi .

Quindi definiamo l'implementazione dell'interfaccia 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;
    }
}
In questo esempio, ordineremo i bordi del grafico in base al loro peso o in base alla distanza dal vertice src (sorgente) al vertice dst (destinazione). Infine utilizziamo il metodo standard java.util.Arrays.sort ():
Arrays.sort(edges, new SortByCost())
Ora il nostro foglio pieno di oggetti Edgesè ordinato in ordine crescente (dal più piccolo al più grande). L'autore della soluzione è Ethan Arrowood.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION