L'ordinamento può essere complicato, soprattutto se l'elenco
Quindi definiamo l'implementazione dell'interfaccia
List
contiene 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. Per 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 ( 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 . |
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.
GO TO FULL VERSION