Ordenar puede ser complicado, especialmente si su lista
Luego definimos la implementación de la interfaz
List
contiene 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. Primero, 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 ( 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 . |
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 Edges
está ordenada en orden ascendente (de menor a mayor). El autor de la solución es Ethan Arrowood.
GO TO FULL VERSION