JavaRush /Blog Java /Random-ES /Usando Java Arrays.sort() en cualquier lista de objetos

Usando Java Arrays.sort() en cualquier lista de objetos

Publicado en el grupo Random-ES
Ordenar puede ser complicado, especialmente si su lista Listcontiene envoltorios de objetos ( Byte, Integer, Short, Long, Double, Float) en lugar de tipos de datos numéricos primitivos. Sugiero utilizar un método que puede resultar muy útil para resolver problemas sencillos o responder la pregunta de un entrevistador. Usando Java Arrays.sort() en cualquier lista de objetos - 1Primero, elijamos qué llenaremos nuestro List. En este ejemplo usaré una lista de bordes de gráfico ( Edges) de una estructura de datos simple 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();

¿Qué es una gráfica?

En matemáticas discretas, una gráfica se define como un par de conjuntos ( V, E), donde Ves un subconjunto de un conjunto contable arbitrario y Ees un subconjunto ( VхV).

Probablemente, para aquellos que no estén acostumbrados a las abstracciones matemáticas, tal definición no les resulte muy clara, así que digámoslo de forma más sencilla:

Un gráfico es una colección de vértices y aristas que los conectan. Un buen ejemplo de gráfico que lo llevará inmediatamente del ámbito de la abstracción al ámbito de lo material es un mapa de vías de ferrocarril.

Los vértices de dicho gráfico son estaciones . Bueno, los caminos entre ellos son bordes .

Luego definimos la implementación de la interfaz 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;
    }
}
En este ejemplo, ordenaremos los bordes del gráfico por su peso o por la distancia desde el vértice src (origen) al vértice dst (destino). Finalmente, utilizamos el método estándar java.util.Arrays.sort ():
Arrays.sort(edges, new SortByCost())
Ahora nuestra hoja llena de objetos Edgesestá ordenada en orden ascendente (de menor a mayor). El autor de la solución es Ethan Arrowood.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION