A classificação pode ser complicada, especialmente se sua lista
Então definimos a implementação da interface
List
contiver wrappers de objetos ( Byte
, Integer
, Short
, Long
, Double
, Float
) em vez de tipos de dados numéricos primitivos. Sugiro usar um método que pode ser muito útil para resolver problemas simples ou responder a perguntas de um entrevistador. Primeiro, vamos escolher o que preencheremos em nosso arquivo List
. Neste exemplo usarei uma lista de arestas de gráfico ( Edges
) de uma estrutura de dados simples 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();
O que é um gráfico? Na matemática discreta, um gráfico é definido como um par de conjuntos ( Provavelmente, para quem não está acostumado com abstrações matemáticas, tal definição não será muito clara, então digamos de forma mais simples: Um gráfico é uma coleção de vértices e arestas que os conectam. Um bom exemplo de gráfico que o levará imediatamente do domínio da abstração para o domínio do material é um mapa de trilhos de trem. Os vértices de tal gráfico são estações . Bem, os caminhos entre eles são arestas . |
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;
}
}
Neste exemplo, classificaremos as arestas do gráfico por seu peso ou pela distância do vértice src (fonte) ao vértice dst (destino). Finalmente, usamos o método padrão java.util.Arrays.sort ()
:
Arrays.sort(edges, new SortByCost())
Agora nossa planilha preenchida com objetos Edges
está classificada em ordem crescente (do menor para o maior). O autor da solução é Ethan Arrowood.
GO TO FULL VERSION