JavaRush /Blog Java /Random-PL /Używanie Java Arrays.sort() na dowolnej liście obiektów

Używanie Java Arrays.sort() na dowolnej liście obiektów

Opublikowano w grupie Random-PL
Sortowanie może być trudne, szczególnie jeśli lista Listzawiera 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. Używanie Java Arrays.sort() na dowolnej liście obiektów - 1Na 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 ( V, E), gdzie Vjest podzbiorem dowolnego przeliczalnego zbioru i Ejest podzbiorem ( VхV).

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 .

Następnie definiujemy implementację interfejsu 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 Edgesjest posortowany rosnąco (od najmniejszego do największego). Autorem rozwiązania jest Ethan Arrowood.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION