Sortowanie może być trudne, szczególnie jeśli lista
Następnie definiujemy implementację interfejsu
List
zawiera opakowania obiektów ( Byte
, Integer
, Short
, Long
, Double
, Float
), a nie prymitywne numeryczne typy danych. Sugeruję zastosowanie metody, która może być bardzo przydatna przy rozwiązywaniu prostych problemów lub odpowiadaniu na pytanie ankietera. Na początek wybierzmy czym wypełnimy nasz plik List
. W tym przykładzie użyję listy krawędzi grafu ( Edges
) z prostej struktury danych 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();
Co to jest wykres? W matematyce dyskretnej wykres definiuje się jako parę zbiorów ( Pewnie dla tych, którzy nie są przyzwyczajeni do abstrakcji matematycznych, taka definicja nie będzie zbyt jasna, więc ujmę to prościej: Graf to zbiór wierzchołków i krawędzi je łączących. Dobrym przykładem wykresu, który od razu przenosi go ze sfery abstrakcji do sfery materiału, jest mapa torów kolejowych. Wierzchołki takiego grafu są stacjami . Cóż, ścieżki między nimi są krawędziami . |
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;
}
}
W tym przykładzie posortujemy krawędzie grafu według ich wagi lub odległości od wierzchołka src (źródłowego) do wierzchołka dst (docelowego). Na koniec używamy standardowej metody java.util.Arrays.sort ()
:
Arrays.sort(edges, new SortByCost())
Teraz nasz arkusz wypełniony obiektami Edges
jest posortowany rosnąco (od najmniejszego do największego). Autorem rozwiązania jest Ethan Arrowood.
GO TO FULL VERSION